2013-05-26 203 views
-3
string operator + (const string &s, char *lit); 

string operator + (const string &s, char *lit) 
{ 
    string temp; 
    temp.len = s.len+strlen(lit); 
    temp.str = new char[temp.len+1]; 
    strcpy(temp.str, s.str); 
    strcat(tmep.str, lit); 
    return temp; 
} 

這是我的proffessor給我作爲示例代碼重載字符串類的示例代碼。事情是,當我編譯它,它說重載+運算符

std::string operator+(const string&, char*)’ must take either zero or one argument 

我只是想知道爲什麼它沒有編制?它只需要一個參數。但不會拿兩個。謝謝。

+1

你能告訴我們你的實際程序(請相關部分)。 – 0x499602D2

+0

從技術上講,它應該編譯,因爲它還沒有被使用。我只是將原型放在標題中,並將代碼放在.cpp文件中。 – ZZPLKF

+0

無論如何,這應該採用'const char *',而不是'char *'。 – chris

回答

3

我想你的教授的意思是命名空間範圍功能(只是通常的功能)。

而你碰巧聲明瞭非靜態成員函數(我想在一些名爲「blog」的類中)。

操作者+接受命名空間範圍1或2個參數(二進制運算符+接受2個參數和一元運算符+接受1個參數),但作爲非靜態成員函數(類範圍)它接受0或1個參數(因爲它已經具有由這個指針定義的第一個隱式參數)。

+0

爲了簡單起見,我只是從班級博客中刪除了它。 – ZZPLKF