Windows Linux c ++编译问题:“没有匹配的调用函数”

时间:2014-03-24 22:52:46

标签: c++ linux compilation compiler-errors

我正在开发一种工具,它提供了在它提供的框架内编写小型c ++代码的工具。该工具是基于Windows和Linux的。我们将代码写入窗口。编译首先在Windows上进行测试。最后执行linux构建以实际在linux上运行整个生产测试。

我创建了一个具有以下签名的函数:

string myClass::myFunc(string& start, bool myflag, Class C1 & c1,
    long a=0, const char* b=NULL, void * c=NULL);

现在,当工具在Windows(Microsoft visual express)上运行时,一切正常,所有测试都通过了。

然而,当代码在linux上编译时,我得到一个错误,指出"没有匹配的函数用于调用"。

这是函数签名:

string myClass::myFunc(string& start, bool myflag, Class C1 & c1,
    long a=0, const char* b=NULL, void * c=NULL);

错误讯息:

myfile.cpp: no matching function for call to 
myClass::myFunc(std::string, bool, classC1&, long int&, 
const char *&, void*&) 

myfile.h: note: candidates are: 
std::string myClass:myFunc(std::string&, bool&, classC1&, 
long int, const char*, void*)

我没有任何访问linux服务器的权限。因此不能提及Linux发行版或任何其他细节。

提前致谢。

  • FTP

1 个答案:

答案 0 :(得分:4)

Microsoft的C ++编译器错误地允许绑定非const引用临时变量。他们现在不会修复bug,因为它会破坏现有的代码。但正如您所发现的那样,该代码已经在符合标准的编译器上被破坏了。

查看是否不能通过值(对于小类型)或通过const引用(对于复制昂贵的值)进行传递。如果它是输出参数,则需要更改调用者以传递左值而不是临时值。