Проблема с объявлением / инициализацией объекта как частного члена в другом классе
Извините, если об этом уже спрашивали, я не могу ничего найти. Я не уверен, как искать это.
У меня есть что-то вроде этого:
class A {
private:
int x;
int y;
public:
A(int, int);
}
class B {
private:
A a(3, 4); // Doesn't compile because of this line
public:
B();
}
Единственный способ решить эту проблему - сделать a
указатель на A
а затем сделать a = new A(3, 4);
внутри B
конструктор. Но я не хочу a
быть указателем.
Как правильно решить эту проблему?
3 ответа
Вы помечаете B
конструктор со списком инициализации членов. Вместо:
B::B() {
...
}
Ты делаешь это:
B::B() : a(3, 4) {
...
}
Или, если конструктор определен в заголовке:
class B {
private:
A a;
public:
B() : a(3, 4) {
...
}
};
class B {
private:
A a;
public:
B() : a(3,4) {}
};
В более широком смысле, решение состоит в том, чтобы изучить C++, читая книгу об этом. Да, это странно, но смысл учебников в том, что они вводят понятия в разумном порядке, и когда они рассказывают вам об элементах данных, они одновременно сообщают вам, как их инициализировать.
Если вы хотите, чтобы Ba инициализировалась с аргументами 3 и 4, то вы делаете это в конструкторе B, например,
class B {
private:
A a;
public:
B(): a(3, 4) {}
}