Closed. This question is off-topic。它当前不接受答案。
                            
                        
                    
                
                            
                                
                
                        
                            
                        
                    
                        
                            想改善这个问题吗? 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