ゼロまたは1つの引数を取る必要があります



Must Take Either Zero



コードは次のように表示されます。

class String { public: String & operator+(const String &) String & operator+(const char *) String & String::operator+(const char * s, const String & st) } String & String::operator+(const String & st) { char * tmp = new char[len + 1] std::strcpy(tmp, str) delete [] str len += std::strlen(st.str) str = new char[len + 1] std::strcpy(str, tmp) delete [] tmp std::strcat(str, st.str) return *this } String & String::operator+(const char * st) { char * tmp = new char[len + 1] std::strcpy(tmp, str) delete [] str len += std::strlen(st) str = new char[len + 1] std::strcpy(str, tmp) delete [] tmp std::strcat(str, st) return *this } String & String::operator+(const char * s, const String & st) { char * tmp = new char[st.len + 1] std::strcpy(tmp, st.str) delete [] st.str st.len += std::strlen(s) st.str = new char[st.len + 1] std::strcpy(st.str, s) std::strcat(st.str, tmp) delete [] tmp return *this }

文字列と文字列で::演算子+(const char * s、const String&st)
コンパイルが表示されます ゼロまたは1つの引数を取る必要があります 違う
デバッグ後、関数定義がフレンド関数として定義されていることがわかりましたが、誤って追加されました ストリング:: コンパイラーによってメンバー関数として制限され、二項演算子のメンバー関数のオーバーロードは、パラメーターを1つだけ持つことも、パラメーターを持たないこともできます。



変更されたコードは次のとおりです。

class String { public: String & operator+(const String &) String & operator+(const char *) friend String & operator+(const char *, String &) } String & String::operator+(const String & st) { char * tmp = new char[len + 1] std::strcpy(tmp, str) delete [] str len += std::strlen(st.str) str = new char[len + 1] std::strcpy(str, tmp) delete [] tmp std::strcat(str, st.str) return *this } String & String::operator+(const char * st) { char * tmp = new char[len + 1] std::strcpy(tmp, str) delete [] str len += std::strlen(st) str = new char[len + 1] std::strcpy(str, tmp) delete [] tmp std::strcat(str, st) return *this } String & operator+(const char * s, String & st) { char * tmp = new char[st.len + 1] std::strcpy(tmp, st.str) delete [] st.str st.len += std::strlen(s) st.str = new char[st.len + 1] std::strcpy(st.str, s) std::strcat(st.str, tmp) delete [] tmp return st }