重构遗留代码,我碰到这个功能(伪)传来:超载,字符串和默认参数
int getMessage(char * buffer, int size = 300);
啧啧,看该缓冲区只是在等待溢出。所以我想出了一个使用std :: string的函数,并认为使用函数重载会很好:
int getMessage(std::string & buffer);
到目前为止,这么好。但是,当我尝试呼叫用字符串函数:
std::string buffer;
int rc = getMessage(buffer);
我得到这个错误:
cannot convert 'std::string' to 'char*' for argument '1' to 'int getMessage(char*, int)'
显然,编译器(GCC 4.1.2)力图转换的std ::字符串以char *满足第一个函数的参数列表(使用默认值来满足第二个参数),放弃但不尝试第二个函数...
我不会有问题这个问题,但我想知道为什么这会失败,以及是否有办法使其按预期工作。
你能提供一个完整的代码示例来显示问题吗?上面的“伪代码”应该正确编译。 – 2009-02-19 13:54:22
已解决/不是问题,请参阅下面的答案。现在我该怎么做 - 删除问题? – DevSolar 2009-02-19 14:15:04