Visual Studio 2012错误C2248在STD ::线程中

Visual Studio 2012 error C2248 in std::thread

本文关键字:STD 线程 C2248 Studio 2012 错误 Visual      更新时间:2023-10-16

我在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.0vcincludexmemory0 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操作。