重構遺留代碼,我碰到這個功能(僞)傳來:超載,字符串和默認參數
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