以下程序无法使用g++ -std=c++11 -Wall -Werror test.cpp -o test.o
进行编译:
#include <thread>
using namespace std;
void fill(int n) {
return;
}
int main() {
thread test(fill, 5);
}
test.cpp:9:12: error: no matching constructor for initialization of 'std::__1::thread'
thread test(fill, 5);
^ ~~~~~~~
是因为fill
与std::fill
中的#include <algorithm>
有冲突吗?我没有包括在内,但我想可能是<thread>
。
将我的函数名称更改为fillie
(或几乎所有其他内容),可以在不链接pthread
的情况下正确地进行编译。
我之所以问是因为这是一条奇怪的编译器错误消息,这还意味着线程构造函数无法根据参数(使用哪种方法有意义,但需要确认)来消除我正在使用的函数的歧义。
答案 0 :(得分:5)
是的,问题是因为未知fill
是std::fill
还是全局fill
函数。
解决该问题的一种方法是编写::fill
以显式使用全局变量。