C++ ';非标准语法;使用'&';要创建指向成员的指针';带螺纹
因此,我尝试从我创建的类中为两个函数创建一个线程:C++ ';非标准语法;使用'&';要创建指向成员的指针';带螺纹,c++,multithreading,class,C++,Multithreading,Class,因此,我尝试从我创建的类中为两个函数创建一个线程: MessagesSender all; std::thread t1(all.updateMessages); std::thread t2(all.sendMessages); 但当我尝试编译时,它会显示以下错误: 非标准语法;使用“&”创建指向成员的指针 为什么???你应该做什么 std::thread t1(&MessagesSender::updateMessages, MessagesSender()); .
MessagesSender all;
std::thread t1(all.updateMessages);
std::thread t2(all.sendMessages);
但当我尝试编译时,它会显示以下错误:
非标准语法;使用“&”创建指向成员的指针
为什么???你应该做什么
std::thread t1(&MessagesSender::updateMessages, MessagesSender());
...
...
t1.join();
对于任何其他成员函数也是如此
如果要使用同一对象,请通过引用传递该对象
std::thread t1(&MessagesSender::updateMessages, std::ref(myMessageSenderobj));
线程
构造函数:
thread( thread&& other ) noexcept;
template< class Function, class... Args >
explicit thread( Function&& f, Args&&... args );
thread(const thread&) = delete;
会有帮助的。我怀疑你的MessagesSender中有一个bug。@Yksisarvinen确实存在,而且当前代码是未定义的行为,因为临时代码将立即被销毁。我必须在其中两个代码中使用具有相同数据的对象。@Yksisarvinen我已更新了我的答案。@Arthur Tacca我不同意这是未定义的行为。线程构造函数的参数被复制了。哦,你是对的,我错了。谢谢你的澄清。(实际上,如果它是一个右值引用,它会移动,就像在本例中一样,但要点是相同的:它实例化一个新对象目标,而不是引用一个现有对象。)
... t1(&MessagesSender::updateMessages ...