定義了一個函數f(const string &str, long pos, long count = -1)
{
//do something
}
而在使用時卻發生了錯誤
int main()
{
string str;
long pos = 1;
f(str, pos);
}
提示信息為
錯誤 1 error C2664: “string &string::f(const string &,long,long)”: 無法將參數 1 從“string”轉換為“long” c:\users\wlp\源.cpp 8 1 string
查閱書籍發現原因
“既可以在函數聲明中也可以在函數定義中指定默認實參,但是在一個文件中,只能為一個形參指定默認實參一次;二是:如果在函數定義的形參表中提供默認實參,那麼只有在包含該函數定義的源文件中調用該函數時,默認實參才是有效的”
我在一個文件中定義了f(),但是在另一個文件中調用,所以無法使用默認實參
默認實參可以在聲明中指定,也可以在定義中指定,但是推薦在聲明中將默認參數給出,在定義中不再給出,因為函數聲明一般在頭文件,這樣包含該頭文件的文件都可以使用該默認實參,否則只有一個文件可以使用。