由于const成员,'operator ='函数不可用

时间:2013-04-15 04:42:39

标签: c++

处理此问题的最佳方法是什么?我想' 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'
}

2 个答案:

答案 0 :(得分:2)

x设为私有。添加int getX()等公共函数以返回值。例如:

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

现在只有改变x的方法是调用构造函数,这是你想要的行为(我认为)。

答案 1 :(得分:1)

编译器不会生成operator=的默认版本(它分配每个数据成员),因为它无法知道您要对该const数据成员做什么。这并不意味着你不能编写自己的operator=,这只意味着编译器不会为你提供一个。{1}}。因此,决定要对该const数据成员执行什么操作,并编写执行它的赋值运算符,以及赋值运算符需要执行的任何操作。