0

この問題を処理する最善の方法は何ですか? 「x」は定数のままにしたいと思います。

class Foo 
{
public:
    Foo(int x) : x(x) { }
    const int x;
};

void main()
{
    Foo a(0), b(1);
    b = a; // error C2582: 'operator =' function is unavailable in 'Foo'
}
4

2 に答える 2

2

プライベートxにする。int getX()値を返すなどのパブリック関数を追加します。例:

class Foo
{
public:
    Foo(int x) : _x(x) {}
    int getX(){return _x;}
private:
    int _x;
};

x を変更する唯一の方法は、必要な動作であるコンストラクターを呼び出すことです (と思います)。

于 2013-04-15T06:42:13.000 に答える
1

コンパイラはoperator=、その const データ メンバーで何をしたいのかを知る方法がないため、(各データ メンバーを割り当てる) の既定のバージョンを生成しません。これは、独自のoperator=. したがって、その const データ メンバーで何をしたいかを決定し、それを実行する代入演算子と、代入演算子が行う必要のある他のすべてのことを記述します。

于 2013-04-15T15:41:17.000 に答える