我有两个对象,分别称为A
和B
例如
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
呼叫setY
和A(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
的值/属性。
答案 0 :(得分:3)
您应使用member initializer list初始化const
数据成员。作为const
对象,可以初始化它,但不能分配它;因此this->a1 = a;
不起作用。
对于无法默认初始化的成员(例如引用成员和const限定类型的成员),必须指定成员初始化程序。
例如
B(int x, int y) : a1(x, y) {}