Le programme suivant ne parvient pas à compiler avec 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);
^ ~~~~~~~
Est-ce parce que fill
est en conflit avec std::fill
de #include <algorithm>
? Je n'ai pas inclus cela, mais je suppose <thread>
que cela aurait pu.
Changer mon nom de fonction en fillie
(ou n'importe quoi d'autre à peu près) lui permet de compiler correctement sans lier pthread
.
Je demande parce que c'est un étrange message d'erreur du compilateur, et cela signifie également que le constructeur de thread ne peut pas lever l'ambiguïté sur la fonction que j'utilise en fonction des paramètres (ce qui a du sens, mais je voulais une confirmation).
Oui, le problème est qu'on ne sait pas si fill
c'est std::fill
ou votre fill
fonction globale .
Une façon de le corriger est d'écrire ::fill
pour utiliser explicitement le global.
Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.
En cas d'infraction, veuillez [email protected] Supprimer.
laisse moi dire quelques mots