簡體   English   中英

std::thread 中的 Visual Studio 2012 錯誤 C2248

[英]Visual Studio 2012 error C2248 in std::thread

我對std::thread類的 Visual Studio 2012 實現有問題。

Error C2248: "std::thread::thread": cannot access private member declared in class std::thread
    c:\program files (x86)\microsoft visual studio 11.0\vc\include\xmemory0 line: 606

A.hpp:

class A{ 
    public:
        A();
        ~A();


    private:
        vector<thread> listOfThreads;       
        int numberOfProcessorCores;
        int startUpWorkerThreads();
};

A.cpp:

    int A::startUpWorkerThreads(){
        if(numberOfProcessorCores <= 0) return 2; //Keine Angabe zur Anzahl der Prozessorkerne
        if(listOfThreads.size() > 0) return 3; //Bereits initialisiertdefiniert

        for(int i = 0; i < numberOfProcessorCores; i ++){
            thread newThread(&TaskManagement::TaskManager::queueWorker);            
            listOfThreads.push_back(newThread);
        }

        return 0;
    }

這是我的程序中使用線程類的部分。

有誰知道為什么會發生這個錯誤?

該錯誤告訴您一個操作正在嘗試調用std::thread的復制構造函數或賦值運算符,這兩者都已刪除或私有。 作為替代方案,您可以通過推送這樣的臨時文件將線程“移動”到向量中:

listOfThreads.push_back(thread(&TaskManagement::TaskManager::queueWorker));

否則,你可以在你的線程對象上調用std::move ,這會讓你擁有一個與默認構造的線程對象處於相同狀態的線程對象(感謝@JonathanWakely 在評論中指出這一點)。 在您的情況下,沒有理由創建線程並顯式移動它。

std::thread沒有復制構造函數,它是執行push_back所需的,並且可能用於其他vector操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM