Discussions dans le c ++, ne peuvent pas utiliser les paramètres

voix
1

Je suis en train de commencer un fil t:

#include <iostream>
#include <fstream>
#include <string>
#include <thread>

void function(int p1, int p2, int p3){
  std::cout<<p1<<p2<<p3<<std::endl;
}

int main(int argc, char const *argv[]) {
  std::cout<<starting<<std::endl;
  std::thread t(function, 1, 2, 3);
  std::cout<<created thread<<std::endl;
  t.join();
  std::cout<<end<<std::endl;
  return 0;
}

Mon compilateur me dit ceci:

doesntwork.cpp:12:15: error: no matching constructor for
      initialization of 'std::thread'
  std::thread t(function, 1, 2, 3);
              ^ ~~~~~~~~~~~~~~~~~
/Library/Developer/CommandLineTools/usr/include/c++/v1/thread:408:9: note: 
      candidate constructor template not viable: requires single
      argument '__f', but 4 arguments were provided
thread::thread(_Fp __f)
        ^
/Library/Developer/CommandLineTools/usr/include/c++/v1/thread:289:5: note: 
      candidate constructor not viable: requires 1 argument, but 4
      were provided
    thread(const thread&);
    ^
/Library/Developer/CommandLineTools/usr/include/c++/v1/thread:296:5: note: 
      candidate constructor not viable: requires 0 arguments, but
      4 were provided
    thread() _NOEXCEPT : __t_(_LIBCPP_NULL_THREAD) {}
    ^
1 error generated.

Dans le premier cas, il me dit que pour le fil t, il n'y a pas de constructeur qui peut utiliser plus de 1 paramètre, alors que si je supprime simplement les arguments (p1, p2, p3), il ne fonctionne pas non plus parce que je ne suis pas repassais tout argmuent ....

Informations du compilateur:

Configured with: --prefix=/Library/Developer/CommandLineTools/usr 

--with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM version 10.0.0 (clang-1000.10.44.2)
Target: x86_64-apple-darwin17.7.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin

commande intégrée utilisée: g++ doesntwork.cpp -o doesntwork.out

Y at-il quelque chose de différent que vous devez faire lors de la compilation avec des fils? Est-ce que je manque quelque chose de très évident?

Créé 20/10/2018 à 02:38
source utilisateur
Dans d'autres langues...                            


1 réponses

voix
1

Sur Mac OS, g ++ (de Xcode: version 10.0 (10A255)) est à clang qui un alias par défaut ne fonctionne pas avec c ++ 11 threads. Pour résoudre le problème , vous devez utiliser le -std=c++11commutateur.

Exemple:

g++ -std=c++11 fileToCompile.cpp -o outputFile.out

Cela devrait vous permettre de compiler le code c ++ en utilisant 11 threads c.

Merci à @MM pour fournir la réponse ci-dessus dans les commentaires.

Créé 21/10/2018 à 09:04
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more