我不知道为什么它不编译我删除行中的注释
/*******************************/
waitThread.push_front(workerID);
/******************************/
只有当我留下评论时,它才会编译......否则,我会得到一个以“declared here”结尾的长异常......
/usr/include/c++/4.6/thread:126:5: error: declared here
也许...的定义有问题 你能解释一下吗?
/* g++ -std=c++0x -o manyThreads manyThreads.cpp -pthread */
#include <thread>
#include <iostream>
#include <mutex>
#include <time.h>
#include <list>
std::list<std::thread::id> myList;
std::mutex mutex;
std::list<std::thread> waitThread;
void insertList(std::thread::id identifier) {
mutex.lock();
myList.push_front(identifier);
mutex.unlock();
}
int main() {
std::list<std::thread::id>::iterator id;
std::list<std::thread>::iterator threadsIter;
int counter;
for(counter=0; counter<6; counter++) {
std::thread workerID(insertList, workerID.get_id());
/*******************************/
waitThread.push_front(workerID);
/******************************/
}
for(threadsIter=waitThread.begin(); threadsIter !=waitThread.end();threadsIter++) {
threadsIter->join();
}
for(id=myList.begin(); id != myList.end(); id++) {
std::cout << *id << "\n";
}
return 0;
}
最佳答案
std::thread 不可复制,因此您不能用它调用 push_front。复制一个线程没有意义,它会做什么?
您也许可以使用
将线程移动到列表中waitThread.push_front(std::move(workerID));
这当然会使该行之后的线程对象无效。
但是这一行看起来也很奇怪:-
std::thread workerID(insertList, workerID.get_id());
我怀疑在此时未构造的对象上调用 get_id 是否有效。
关于c++ - 使用 <list> C++ 编译时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14729958/