目前尝试通过引用传递一个对象到另一个线程,但是当我尝试构建我的解决方案时出现错误。
void OrderServer(Orders& customerOrders)
{
Item tempItem;
customerOrders.add(tempItem);
}
int main()
{
Orders customerOrders();
auto serverThread = std::thread(OrderServer, std::cref(customerOrders));
serverThread.detach();
return 0;
}
以下是错误:
c:\ program files(x86)\ microsoft visual studio \ 2017 \ community \ vc \ tools \ msvc \ 14.11.25503 \ include \ thr \ xthread(240):错误C2672:' std :: invoke& #39;:找不到匹配的重载函数 1> c:\ program files(x86)\ microsoft visual studio \ 2017 \ community \ vc \ tools \ msvc \ 14.11.25503 \ include \ thr \ xthread(248):注意:参见函数模板实例化' void std :: _ LaunchPad< _Target> :: _ Execute< 0,1>(std :: tuple>&,std :: integer_sequence< _Ty,0,1>)'正在编制
答案 0 :(得分:2)
Orders customerOrders();
声明一个函数。这被称为最令人烦恼的解析。
您只需使用Orders customerOrders;
答案 1 :(得分:0)
您可以尝试简单地说:
auto serverThread = std::thread(OrderServer, customerOrders);
(和told by François Moisan一样,在声明customerOrders
时,您会输入拼写错误。
没有任何std::cref
。但是,您的线程稍后会被分离,但customerOrders
会因main
的返回而被销毁。这可能是undefined behavior,因为OrderServer
然后使用对某个不再存在的对象的引用。