自分で文字列クラスを書いています。そして、私はそのようなコードを持っています。オーバーロードしたいoperator=
。これは私の実際のコードであり、コードの最後の部分でエラーが発生します。
#include <iostream>
#include <string.h>
#include <stdlib.h>
using namespace std;
class S {
public:
S();
~S() { delete []string;}
S &operator =(const S &s);
private:
char *string;
int l;
};
S::S()
{
l = 0;
string = new char[1];
string[0]='\0';
}
S &operator=(const S &s)
{
if (this != &s)
{
delete []string;
string = new char[s.l+1];
memcpy(string,s.string,s.l+1);
return *this;
}
return *this;
}
しかし、残念ながらエラー 'S&operator =(const S&)'は非静的メンバー関数でなければなりません。
クラス名がありません:
これはグローバル演算子=
をグローバルにすることはできません:
S &operator=(const S &s)
これをクラス関数として定義する必要があります:
S & S::operator=(const S &s)
// ^^^
PiotrNyczが合理的な答えを提供してくれたと思います。ここでもう1つWordを追加してください。
C++では、代入演算子のオーバーロード関数をfriend function
にすることはできませんでした。 operator =にフレンド関数を使用すると、同じコンパイラエラー「オーバーロード=演算子は非静的メンバー関数でなければならない」が発生します。