Closed. This question is off-topic。它当前不接受答案。
想改善这个问题吗? Update the question,所以它是on-topic,用于堆栈溢出。
3年前关闭。
一切工作正常并编译良好,直到我
test.cpp:173:33:错误:没有匹配的函数可以调用
‘std :: thread :: thread(,int,int,
int)’
std :: thread t1(read,1,0,3),
^ test.cpp:173:33:注意:候选者是:在test.cpp:6:0包含的文件中:
/usr/include/c++/4.8/thread:133:7:注意:模板std :: thread :: thread(_Callable &&,_Args && ...)
线程(_Callable && __f,_Args && ... __args)
[另外200条相似的线]
没有
注意:我之前通过apt-get安装了ncurses,也许这破坏了我的环境?
您将指向函数
unistd.h声明函数:
从错误消息中可以看出,
您可以将标识符显式转换为正确类型的函数指针,以解决歧义。
想改善这个问题吗? Update the question,所以它是on-topic,用于堆栈溢出。
3年前关闭。
一切工作正常并编译良好,直到我
#include <unistd.h>
(这是我cpp中的单个修改)完全破坏了一切:test.cpp:173:33:错误:没有匹配的函数可以调用
‘std :: thread :: thread(,int,int,
int)’
std :: thread t1(read,1,0,3),
^ test.cpp:173:33:注意:候选者是:在test.cpp:6:0包含的文件中:
/usr/include/c++/4.8/thread:133:7:注意:模板std :: thread :: thread(_Callable &&,_Args && ...)
线程(_Callable && __f,_Args && ... __args)
[另外200条相似的线]
没有
#include <unistd.h>
的所有东西都可以工作和编译,但我需要https://stackoverflow.com/a/6856689/1879409注意:我之前通过apt-get安装了ncurses,也许这破坏了我的环境?
最佳答案
这里:
std::thread t1(read, 1, 0, 3)
您将指向函数
read
的函数指针传递给std::thread
的构造函数。unistd.h声明函数:
ssize_t read(int, void *, size_t)
。从错误消息中可以看出,
read
函数有重载。在包含unistd.h之前使用的代码与unistd.h声明的内容不同。重载的函数不能隐式转换为函数指针,因为编译器无法知道您打算使用哪个read
函数。您可以将标识符显式转换为正确类型的函数指针,以解决歧义。
关于c++ - 如果包含<unistd.h>,C++奇怪的编译器错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40465695/
10-12 01:29