2017-02-14 8 views
-1

Ich weiß, diese Frage ähnlich erscheinen diejenigen bereits beantwortet, aber da die Antwort auf ihnen gegeben für mich nicht arbeiten, ich ein dublicate von ihnen nicht diese Frage betrachtenAufruf Gewinde Funktionen mit Argumenten nicht möglich

zu sein

Mir ist wohl bewusst, dass die Frage: Wie kann ich eine C++ Funktion als Thread mit 1 oder mehr Argumenten aufrufen - sowohl hier als auch auf verschiedenen Tutorials - und in jedem Fall ist die Antwort einfach dass dies der Weg, es zu tun:

(Beispiel direkt aus this question genommen)

012.351.

Allerdings habe ich versucht, diesen Code und viele weitere (mehr oder weniger identische) Beispiele dafür zu kopieren, und dennoch jedes Mal, wenn ich kompiliere (durch termial als g++ test.cpp -o test.app (die .app muss hinzugefügt werden, weil Ich bin auf einem Mac (beachten Sie, dass diese Art der Kompilierung in der Tat funktioniert für mich, und dass der Fehler ist einfach nicht ein Ergebnis von mir nicht wissen, wie man ein C++ - Programm kompilieren))) ein solches Programm bekomme ich diesen Fehler Nachricht:

test.cpp:16:12: error: no matching constructor for initialization of 'std::__1::thread' 
    thread t1(task1, "Hello"); 
     ^~~~~~~~~~~~~~~ 
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/thread:389:9: note: candidate constructor template not viable: requires single argument '__f', but 
     2 arguments were provided 
thread::thread(_Fp __f) 
     ^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/thread:297:5: note: candidate constructor not viable: requires 1 argument, but 2 were provided 
    thread(const thread&); 
    ^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/thread:304:5: note: candidate constructor not viable: requires 0 arguments, but 2 were provided 
    thread() _NOEXCEPT : __t_(0) {} 

Meine Frage dafür ist, was ich tue falsch im Vergleich zu allen Menschen, die possitively Funktionen mit Argumenten Gewinde machen kann, und da ich haben Fragen nicht von Menschen experiancing ähnliche Probleme gefragt gefunden, ich diese Frage nicht ein Duplikat der vielen betrachten Wie ich

Was eine Gewinde Funktion mit Argumenten aufrufen kann, wie ich weiß, doesn Verwendung von Threads‘ Ich brauche keine speziellen Compiler-Flags, und da ich perfekt Programme mit Thread-Funktionen ohne Argumente ausführen kann, können Sie nicht behaupten, dass mein Computer oder Compiler überhaupt nicht in der Lage ist, Threads zu verwenden.

+0

Wenn Sie 'g ++ --version' tun, was meldet es? Hast du eine sehr alte Version von Clang (auf MacOS 'gcc' und' g ++ 'sind normalerweise Aliase des Clang-Compilers), die C++ 11 (der Standard, in dem' std: thread' hinzugefügt wurde) nicht vollständig unterstützt? –

+0

Ändern Sie den Thread-Proc, um ein 'char const *' zu nehmen. –

+3

Compiler-Schalter hinzufügen -std = C++ 11. –

Antwort

1

Abhängig von der GCC-Version sollten Sie den Compiler-Schalter -std = C++ 11 oder -std = C++ 0x hinzufügen.

1

Ich bin es in der Lage here

mit C++ 14 zu kompilieren und bekam, wie unten ausgegeben.

task1 says: Hello 

Compilieren Verwendung -std=c++11 Flagge oder darüber.

Verwandte Themen