Visual Studio 2012错误C2248在STD ::线程中
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.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
操作。
相关文章:
- 即发即弃 std::线程对象清理自身
- std::线程导致程序中止
- 在std::线程中使用已分配的结构数据
- 使用-static libstdc++时std::线程弱,因此在运行时会导致崩溃
- std::线程与 pthread_setschedparam 与 C++ 11.
- 运行 std::线程不在构造函数中
- C++ std::线程调用方法,从对象原因到调用此类的析构函数
- 编译问题 C++ 同时,尝试通过调用另一个对象中的成员函数来创建 std:: 线程
- 错误:静态断言失败:std ::线程参数必须在转换为rvalues后不可行
- C STD ::线程中的种族状况或内存损坏
- 在 Valgrind 输出中仍然可以访问 std 线程向量的块
- 将类Cotaining std ::线程添加到向量
- 如何使用mingw编译C STD ::线程代码
- 从其他std ::线程更新QT GUI
- STD ::线程不会退出
- 处理 std::线程包装器类的立即销毁
- C++ std 线程并列出分段错误(核心转储)
- 杀死后的STD ::线程如何处理
- 干净取消在输入/输出调用中被阻止的 std::线程
- std ::线程最大并发线程