[英]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.