我在嘗試在Indigo中創建訂戶時遇到問題。我有一個類中的shared_ptr來容納NodeHandle對象。我這樣做是爲了讓NodeHandle可以用於其他類的成員。問題是線程啓動時,它似乎掛在MyClass構造函數中的NodeHandle對象的make_shared調用上,因爲它從未到達下一行。爲什麼NodeHandle掛起?
class MyClass
{
private:
std::shared_ptr<ros::NodeHandle> nh;
std::map<std::string, std::string> remap;
// ...
};
MyClass::MyClass()
{
// remap is empty
ros::init(remap, "my_node");
nh = make_shared<ros::NodeHandle>();
cout << "does not reach this line" << endl;
}
int MyClass::run()
{
// ...
}
我啓動線程鏈接纔可所以......
{
// ...
myobj = make_shared<MyClass>();
my_thread = thread(&MyClass::run, myobj);
// ...
}
的思考?
我做了你所做的事情,然後通過將ros :: init放在main中,然後實例化一個NodeHandle,然後訂閱,並且它仍然掛起(這次沒有涉及線程),我簡化了我的問題。你是否看到我使用ros :: init()和傳入的空映射有什麼問題? – Ender
嗯,它應該按照[這個](http://docs.ros.org/api/roscpp/html/namespaceros.html#a61a193529a9aad90ddace7724c7fc759)... – Vtik