我知道这个问题看起来与已经回答过的问题类似,但由于给出的答案对我不起作用,我不认为这个问题是他们的共同点
我很清楚这个问题:如何将c ++函数称为具有1个或多个参数的线程已被多次回答 - 无论是在这里还是在各种教程中 - 并且在每种情况下答案都是只是这是这样做的方式:
(例如直接来自this question)
#include <string>
#include <iostream>
#include <thread>
using namespace std;
// The function we want to execute on the new thread.
void task1(string msg)
{
cout << "task1 says: " << msg;
}
int main()
{
// Constructs the new thread and runs it. Does not block execution.
thread t1(task1, "Hello");
// Makes the main thread wait for the new thread to finish execution, therefore blocks its own execution.
t1.join();
}
然而,我尝试过将这段代码和更多(或多或少相同)的例子进行复制,但是,每次编译时(通过termial 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) {}
我的问题是,与所有可能通过参数制作线程函数的人相比,我做错了什么,而且由于我没有发现任何人提出类似问题的问题,我不认为这质疑许多的副本如何调用带参数的线程函数
据我所知,使用线程并不需要任何特定的编译器标志,因为我完全可以运行带有线程函数而没有参数的程序,你不能声称我的计算机或编译器不能使用线程共
答案 0 :(得分:1)
根据gcc版本,您应该添加编译器开关-std = c ++ 11,或-std = c ++ 0x。
答案 1 :(得分:1)