【问题标题】:expression must be modified lvalue表达式必须修改左值
【发布时间】:2015-03-04 04:17:18
【问题描述】:
class Base

{

  private:

    int _b;

  public:

    Base();

    Base(int b);

    virtual void display();

    //Assignment operator overload.

    Base& operator=(const Base&);

};

Base::Base()

{

    _b = 0;

}

Base::Base(int b)

{

    _b = b;

}

void Base::display()

{

    cout<<"base value := "<<_b<<endl;

}

Base& Base::operator=(const Base& ob)

{

    //Check for self-assignment.

    if(this != &ob)

    {

        this->_b = ob._b;

    }

    return *this;

}

class Derived : public Base

{

  private:

    int _d;

  public:

    Derived();

    Derived(int d);

    void display();

    //Assignment operator overload.

    Derived & operator=(const Derived& ob);

};

Derived::Derived() : Base()

{

    _d = 0;

}

Derived::Derived(int d) : Base(d)

{

    _d = d;

}

void Derived::display()

{

    cout<<"Derived value := "<<_d<<endl;

}

Derived & Derived::operator=(const Derived& ob)

{

    if(this != &ob)

    {

        this->_d = ob._d;

    }

    return *this;

}

int main()

{

    Derived d1(10),d2(),d3;

    //How d2 becomes lvalue and not d3 above.

    d2 = d1;//Error :: expression must be modified lvalue.

    //d2.display();

    d3 = d1;

    return 0;

}

【问题讨论】:

  • 你有什么问题?
  • 问问题的时候看预览了吗?如您所见,它非常不可读。请修正格式。
  • d2() 声明了一个函数(不带参数并返回 Derived),请注意。
  • 谢谢,我想我会使用默认构造函数调用。

标签: c++ operator-overloading lvalue


【解决方案1】:
Derived d2();

被视为函数声明。这样做:-

Derived d1(10),d2,d3;
d2 = d1;          /////ahaa it's working

【讨论】:

    【解决方案2】:

    问题是你的'd2()'。语句 d2() 不会像您想象的那样创建一个名为 d2 的派生对象。正确的选项是:

    Derived d2;
    Derived d2 = Derived();
    Derived d2(0); // or any other integer
    

    声明

    Derived d2();
    

    告诉编译器您正在定义一个不带参数并返回 Derived 类型的函数。

    更多解释请参见此处: error: request for member '..' in '..' which is of non-class type

    【讨论】:

      猜你喜欢
      • 2020-07-07
      • 2021-09-17
      • 2014-12-15
      • 2014-12-20
      • 2015-09-19
      • 2016-05-09
      • 2016-09-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多