尝试构造std :: thread时出现奇怪的编译器错误:

时间:2019-02-10 05:30:20

标签: c++ c++11 stdthread

以下程序无法使用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);
           ^    ~~~~~~~

是因为fillstd::fill中的#include <algorithm>有冲突吗?我没有包括在内,但我想可能是<thread>

将我的函数名称更改为fillie(或几乎所有其他内容),可以在不链接pthread的情况下正确地进行编译。

我之所以问是因为这是一条奇怪的编译器错误消息,这还意味着线程构造函数无法根据参数(使用哪种方法有意义,但需要确认)来消除我正在使用的函数的歧义。

1 个答案:

答案 0 :(得分:5)

是的,问题是因为未知fillstd::fill还是全局fill函数。

解决该问题的一种方法是编写::fill以显式使用全局变量。