gpt4 book ai didi

c++ - std::thread 中的 Visual Studio 2012 错误 C2248

转载 作者:搜寻专家 更新时间:2023-10-31 01:51:58 24 4
gpt4 key购买 nike

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 的复制构造函数或赋值运算符,它们都已删除或私有(private)。作为替代方案,您可以通过像这样推送一个临时变量来将线程“移动”到 vector 中:

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

否则,您可以在您的线程对象上调用 std::move,这使您的线程对象处于与默认构造的状态相同的状态(感谢@JonathanWakely 在评论)。在您的情况下,没有理由创建线程并显式移动它。

关于c++ - std::thread 中的 Visual Studio 2012 错误 C2248,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13335337/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com