将堆栈对象等同于对象C ++中的另一个对象

时间:2019-06-05 08:37:57

标签: c++ initialization

我有两个对象,分别称为AB 例如

class A {
   private:
     int x; 
     int y;

   public:
     A();
     A(int x, int y);
     void setX(int);
     void setY(int);
};

class B {
   private:
     const A a1;

   public:
     B();
     B(int x, int y) {
       //my problem is here
       A a(x, y);
       this->a1 = a;
     };
};

如果B用参数初始化,那么我也想用a1初始化的参数B来初始化A(int x, int y)

我不想在堆中初始化a1

我目前收到此错误

  

没有运算符“ =”与这些操作数匹配-操作数类型为:const Brain = Brain

修改

来自@songyuanyao的以下答案

B::B(int x, int y) : a1(x, y){};

它可以工作,但是由于我对const缺乏了解,所以我现在遇到了另一个问题。当我像这样从setX呼叫setYA(int x, int y)

A::A(int x, int y) {
    setX(x);
    setY(y);
}

void A::setX(int x) {
    this->x = x;
}

void A::setY(int y) {
    this->y = y;
}

它似乎并没有改变类x的{​​{1}}和y的值/属性。

1 个答案:

答案 0 :(得分:3)

您应使用member initializer list初始化const数据成员。作为const对象,可以初始化它,但不能分配它;因此this->a1 = a;不起作用。

  

对于无法默认初始化的成员(例如引用成员和const限定类型的成员),必须指定成员初始化程序。

例如

B(int x, int y) : a1(x, y) {}