C ++: Инициализация унаследованного поля

У меня вопрос об инициализации унаследованных членов в конструкторе производного класса. Пример кода:

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 ++, если это возможно.

20
задан Haspemulator 21 October 2010 в 08:45
поделиться