Приравнивать объект стека к другому внутри объекта C ++ - PullRequest
1 голос
/ 05 июня 2019

У меня есть два объекта, вызовите 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

Amend

Из ответа ниже @songyuanyao

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

itработает, но сейчас у меня другая проблема из-за недостатка знаний для 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 и y класса A.

1 Ответ

3 голосов
/ 05 июня 2019

Вы должны инициализировать элемент данных const с помощью списка инициализаторов элементов .Как const объект, он может быть инициализирован, но не может быть назначен;поэтому this->a1 = a; не работает.

Для элементов, которые не могут быть инициализированы по умолчанию, таких как члены ссылочного типа и типа с константной квалификацией, должны быть указаны инициализаторы элементов.

например

B(int x, int y) : a1(x, y) {}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...