我正在开发一种工具,它提供了在它提供的框架内编写小型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发行版或任何其他细节。
提前致谢。
答案 0 :(得分:4)
Microsoft的C ++编译器错误地允许绑定非const
引用临时变量。他们现在不会修复bug,因为它会破坏现有的代码。但正如您所发现的那样,该代码已经在符合标准的编译器上被破坏了。
查看是否不能通过值(对于小类型)或通过const引用(对于复制昂贵的值)进行传递。如果它是输出参数,则需要更改调用者以传递左值而不是临时值。