2017-02-14 5 views
-1

Я знаю, что этот вопрос появляются похожие на уже ответили те, но так как ответ дан им не работает для меня, я не считаю этот вопрос быть продублируйте ихВызов резьбовыми функции с аргументами, не представляется возможным

Мне хорошо известно, что вопрос: как я вызываю функцию C++ как поток, который имеет 1 или более аргументов, был дан ответ несколько раз - как здесь, так и в разных учебниках, - и в каждом случае ответ просто что это способ сделать это:

(пример взято непосредственно из this question)

Однако я пробовал копировать оба этих кода и многие другие (более или менее идентичные) примеры того, как это сделать, и все же каждый раз, когда я компилирую (через терминальный как таковой g++ test.cpp -o test.app (.app необходимо добавить, потому что Я нахожусь на Mac (Заметьте, что этот способ компиляции действительно работает для меня, и что ошибка просто не является результатом того, что я не знаю, как скомпилировать C++-программу))) такую ​​программу я получаю эту ошибку сообщение:

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) {} 

Мой вопрос для этого есть то, что я делаю неправильно по сравнению со всеми людьми, которые possitively могут сделать резьбовыми функции с аргументами, а так как я не нашли каких-либо вопросов, которые задают люди experiancing подобные проблемы, я не считаю этот вопрос дубликат многих Как вызвать резьбовую функцию с аргументами

Насколько я знаю, с использованием нитей Безразлично» t требуют каких-либо конкретных флагов компилятора, и поскольку я отлично умею запускать программы с потоковыми функциями без аргументов, вы не можете утверждать, что мой компьютер или компилятор неспособен использовать потоки в целом.

+0

Если вы делаете 'g ++ --version', что он сообщает? У вас есть очень старая версия Clang (на macOS 'gcc' и' g ++ 'обычно являются псевдонимами компилятора Clang), который не полностью поддерживает C++ 11 (стандарт, в который был добавлен' std: thread')? –

+0

Измените поток proc, чтобы взять 'char const *' –

+3

Добавить компилятор switch -std = C++ 11. –

ответ

1

В зависимости от версии gcc вы должны добавить компилятор -std = C++ 11 или -std = C++ 0x.

1

Я могу скомпилировать here

с C++ 14 и получили выход, как показано ниже.

task1 says: Hello 

Скомпилировать, используя -std=c++11 флаг или выше.