Я пытаюсь создать экземпляр класса внутри класса, так что внешний класс содержит внутренний класс.Создание экземпляра класса внутри класса
Это мой код:
#include <iostream>
#include <string>
class Inner {
private:
std::string message;
public:
Inner(std::string m);
void print() const;
};
Inner::Inner(std::string m) {
message = m;
}
void Inner::print() const {
std::cout << message << std::endl;
std::cout << message << std::endl;
}
class Outer {
private:
std::string message;
Inner in;
public:
Outer(std::string m);
void print() const;
};
Outer::Outer(std::string m) {
message = m;
}
void Outer::print() const {
std::cout << message << std::endl;
}
int main() {
Outer out("Hello world.");
out.print();
return 0;
}
«Внутренний в», это моя попытка, содержащая внутренний внутри внешнего, однако, когда я компилирую, я получаю сообщение об ошибке, что не существует никакой функции согласования для вызова для Inner :: Inner(). Что я сделал не так?
Спасибо.
Спасибо! Мне удалось понять это. –
-1. Вам не нужно использовать списки инициализаторов для инициализации членов класса. Проблема заключается в отсутствующем конструкторе по умолчанию. Существует несколько способов решения этой проблемы - использование списка инициализаторов, в котором вы передаете начальное значение для поля Inner, является одним. – iheanyi
@iheanyi: Чтобы решить проблему, как указано, вам нужно. В противном случае 'Inner' не будет иметь инициализированный элемент данных. Кроме того, мои классы довольно часто не имеют конструктора по умолчанию. Это потому, что для многих моих классов состояние инициализированного, но не заполненного данных не имеет никакого смысла. YMMV, но добавление конструкторов по умолчанию, чтобы избежать перечисления элементов данных в списке инициализации, безусловно, кажется мне очень неправильным советом. – sbi