наследование c ++: ошибка C2614, вызывающая конструктор базового класса - PullRequest
0 голосов
/ 30 сентября 2011

У меня есть базовый класс 'A', у которого есть подкласс 'B', у которого есть подкласс 'C', у которого есть подкласс 'D'.

Я хочу, чтобы D вызвал конструктор 'A,

D(int x,int y):A(x,y){};

но я получаю сообщение об ошибке: ошибка C2614: «D»: недопустимая инициализация члена: «A» не является ни базой, ни членом.

D может вызывать любой из конструкторов «C»хорошо, но это не то, что я хочу.Любая помощь будет очень признательна.

Ответы [ 2 ]

3 голосов
/ 30 сентября 2011

Вы застряли, так работает C ++ - вам нужно только вызвать конструктор вашего непосредственного родителя.Вы можете последовательно соединить их так, чтобы D вызывал конструктор C, который вызывает конструктор B, который вызывает конструктор A.

D(int x,int y):C(x,y){};
C(int x,int y):B(x,y){};
B(int x,int y):A(x,y){};
1 голос
/ 30 сентября 2011

Как указывает ответ Марка Рэнсома, производному классу разрешено вызывать только конструктор своего базового класса.

В вашем случае вы можете решить эту проблему, передав аргументы конструктора D вниз по иерархии наследования, пока конструктор A не будет вызван B с этими аргументами.

Другой вариант - создать protected функцию, скажем, A::init( args ), которая может быть вызвана D напрямую.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...