У меня вопрос об инициализации унаследованных членов в конструкторе производного класса. Пример кода:
class A
{
public:
int m_int;
};
class B: public A
{
public:
B():m_int(0){}
};
Этот код дает мне следующий результат:
В конструкторе 'B :: B ()':
Строка 10: ошибка: класс 'B' не имеет поля с именем 'm_int'
(см. http://codepad.org/tn1weFFP )
Я догадываюсь, почему это происходит? m_int
должен быть членом B
, а родительский класс A
уже должен быть инициализирован при инициализации m_int
в B
] происходит (потому что родительские конструкторы запускаются до инициализации члена унаследованного класса). Где ошибка в моих рассуждениях? Что на самом деле происходит в этом коде?
РЕДАКТИРОВАТЬ
: мне известны другие возможности инициализации этого члена (базовый конструктор или присвоение в производном конструкторе), но я хочу понять, почему это незаконно, как я пытаюсь это сделать? Какая-то конкретная функция языка C ++ или что-то подобное? Пожалуйста, укажите мне абзац в стандарте C ++, если это возможно.