繁体   English   中英

C ++创建线程并按引用传递对象

[英]C++ Making a thread and passing Object by reference

当前尝试通过引用将对象传递给另一个线程,但是在尝试构建解决方案时出现错误。

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:\\程序文件(x86)\\ Microsoft Visual Studio \\ 2017 \\ community \\ vc \\ tools \\ msvc \\ 14.11.25503 \\ include \\ thr \\ xthread(240):错误C2672:'std :: invoke':没有匹配的重载函数找到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>)'正在编译

Orders customerOrders(); 声明一个函数。 这被称为最烦人的解析。

您可以简单地使用Orders customerOrders;

您可以尝试简单地:

auto serverThread = std::thread(OrderServer, customerOrders);

(并且正如FrançoisMoisan讲的那样,在声明customerOrders时您有一个错字)。

没有任何std::cref 但是,您的线程稍后会被分离,但是main的返回会破坏customerOrders 这可能是未定义的行为,因为OrderServer随后使用对不再存在的某个对象的引用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM