-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;
}

これは、文字列クラスをオーバーロードする例として、教授からサンプル コードとして提供されたものです。事は、私がそれをコンパイルすると、それは言う

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

なぜそれがコンパイルされないのだろうか?引数は 1 つだけです。しかし、2つかかりません。ありがとう。

4

1 に答える 1

3

あなたの教授は名前空間スコープ関数(通常の関数)を意味していたと思います。

そして、たまたま代わりに非静的メンバー関数を宣言しました(「ブログ」という名前のクラス内で推測します)。

operator+ は名前空間スコープで1 つまたは 2 つの引数を受け入れます(二項 operator+ は 2 つの引数を受け入れ、単項 operator+ は 1 つの引数を受け入れます) が、非静的メンバー関数として(クラス スコープで) 0 または 1 つの引数を受け入れます (最初の暗黙の引数が既に定義されているため)このポインタによって)。

于 2013-05-26T21:14:22.393 に答える