Я уверен, что это очень простой вопрос. Следующий код показывает, что я пытаюсь сделать:
class MemberClass {
public:
MemberClass(int abc){ }
};
class MyClass {
public:
MemberClass m_class;
MyClass(int xyz) {
if(xyz == 42)
m_class = MemberClass(12);
else
m_class = MemberClass(32);
}
};
Это не скомпилируется, потому что m_class
создается с помощью пустого конструктора (которого не существует). Каков правильный способ сделать это? Мое предположение заключается в использовании указателей и создании экземпляров m_class
с помощью new
, но я надеюсь, что есть более простой способ.
Изменить: Я должен был сказать ранее, но моя фактическая проблема имеет дополнительное усложнение: мне нужно вызвать метод до инициализации m_class, чтобы настроить среду. Итак:
class MyClass {
public:
MemberClass m_class;
MyClass(int xyz) {
do_something(); // this must happen before m_class is created
if(xyz == 42)
m_class = MemberClass(12);
else
m_class = MemberClass(32);
}
};
Можно ли добиться этого с помощью причудливых трюков списка инициализации?