1. ホーム
  2. その他

[解決済み】演算子のオーバーロード時のエラー(非静的メンバ関数でなければならない)

2022-01-17 11:47:12

質問

文字列クラスを自作しています。そして、そのようなコードを持っています。私はちょうどオーバーロードしたい 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&)' must be a nonstatic member function はグローバルにできません。

=

クラス関数として定義する必要があります。

S &operator=(const S &s)