我无法编译我的 C++ 程序。非常感谢有关此错误的一些帮助。在头文件中,我有这个:
struct workerT{
workerT() : status(true), threadSem(0){}
bool status;
std::function<void(void)> func;
semaphore threadSem;
};
std::vector<workerT> workers;
在我的 .cc 文件中,我试图像这样初始化该向量:
fill(workers.begin(), workers.end(), workerT());
这失败并出现错误:错误:'TP::workerT& TP::workerT::operator=(const TP::workerT&)' 被隐式删除,因为默认定义格式不正确:它指向 semaphore.h 文件. Semaphore.h 的定义如下:
public:
semaphore(int value = 0);
....
private:
int value;
....
semaphore(const semaphore& orig) = delete;
const semaphore& operator=(const semaphore& rhs) const = delete;
如果我删除“填充”行,程序就会编译,但我真的需要它,因为我想初始化向量。当我制作一个虚拟结构并尝试将 push_back 放入向量时,我收到了相同的错误消息。
更新:感谢@DyP!我仍然需要帮助编译。将“填充”行替换为:
std::generate(workers.begin(), workers.end(), free_func);
将其添加到我的标题中:
workerT free_func(){
return {};
}
收到这些错误:
thread-pool.cc:在构造函数'ThreadPool::ThreadPool(size_t)'中:thread-pool.cc:33:58:错误:'ThreadPool::workerT (ThreadPool::)()' 类型的参数不匹配' ThreadPool::workerT (ThreadPool::*)()' 在来自 /usr/include/c++/4.6/algorithm:63:0 的文件中,来自 thread-pool.cc:15: /usr/include/c++/4.6/ bits/stl_algo.h: 在函数'void std::generate(_FIter, _FIter, _Generator) [with _FIter = __gnu_cxx::__normal_iterator >, _Generator = ThreadPool::workerT (ThreadPool::*)()]'中:线程- pool.cc:33:58:从这里实例化 /usr/include/c++/4.6/bits/stl_algo.h:5013:2: 错误:必须使用 '. ' 或 '-> ' 在 '__gen (...)' 中调用指向成员函数的指针,例如 '(... ->* __gen) (...)' make: * [thread-pool.o ] 错误 1
更新——在我的 .cc 文件中:
using namespace std;
static workerT free_func(){
return {};
}
ThreadPool(...args...){
std::generate(workers.begin(), workers.end(), free_func);
}
错误:
thread-pool.cc:19:10: error: ‘workerT’ does not name a type
thread-pool.cc: In constructor ‘ThreadPool::ThreadPool(size_t)’:
thread-pool.cc:39:49: error: ‘free_func’ was not declared in this scope
make: *** [thread-pool.o] Error 1
再次更新:
static ThreadPool::workerT free_func(){
return {};
}
ThreadPool(...args...){
std::generate(workers.begin(), workers.end(), free_func);
}
在线程池.h 中:
struct workerT{
workerT() : status(true), threadSem(0){}
bool status;
std::function<void(void)> func;
semaphore threadSem;
};