簡體   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