Странная ошибка компилятора при попытке создать std :: thread: - PullRequest
0 голосов
/ 10 февраля 2019

Следующая программа не может быть скомпилирована с 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.

Я спрашиваю, потому что это странное сообщение об ошибке компилятора, а также это означает, что конструктор потока не может определить, какую функцию я использую, основываясь на параметрах (что имеет смысл, но требует подтверждения).

1 Ответ

0 голосов
/ 10 февраля 2019

Да, проблема в том, что неизвестно, является ли fill std::fill или вашей глобальной fill функцией.

Один из способов исправить это - написать ::fill, чтобы явно использоватьглобальный.

...