Я пытаюсь написать относительно глубокую иерархию классов, и мой компилятор продолжает бросать «не соответствующую функцию для вызова [конструктор по умолчанию для бас-класса]». Вот сценарий:Список инициализации C++ во втором классе derrive
Class A {
A(int);//note, no default constructor
}
Class B : public A {
B(int i, int j) : A(i), someMemberVariable(j) {}
int someMemberVariable;
}
Class C : public B {
C(int k, int l) : B(k, l) {}
}
и компилятор бросает ошибку на линии конструктора класса С не говоря «нет подходящей функции для вызова A :: A()» и говорит мне, чтобы использовать A :: A (INT).
Я понимаю, что у меня нет конструктора по умолчанию для класса A, и компилятор запутывается при попытке подкласса подкласса. Однако я не понимаю, почему. Я использовал список инициализации, чтобы избежать этого. Если я использую только 2-уровневые классы, то он работает нормально, но третий класс дает мне ошибку. Что я здесь делаю неправильно?
Вы должны подготовить ['SSCCE'] (http://sscce.org). Трудно поверить, что приведенный выше код является репрезентативным для вашей проблемы, поскольку вы не копировали-вставляете то из любого реального кода ('Class' не является ключевым словом, точки с запятой отсутствуют и т. Д.) –
конструкторы должны быть общедоступными; и после исправления класса все компилируется на VS2008. – Max
Похоже, он отлично работает здесь: https://ideone.com/CxoszY. «мой компилятор продолжает метать». Возможно, вы хотели бы поделиться, какой компилятор вы используете? – Bill