Класс, унаследованный от класса без конструктора по умолчанию - PullRequest
7 голосов
/ 15 сентября 2010

Прямо сейчас у меня есть класс A, который наследуется от класса B, а B не имеет конструктора по умолчанию.Я пытаюсь создать конструктор для A, который имеет точно такие же параметры для конструктора B, но я получаю:

error: no matching function for call to ‘B::B()’
note: candidates are: B::B(int)

Как бы исправить эту ошибку?

Ответы [ 2 ]

20 голосов
/ 15 сентября 2010

Конструктор должен выглядеть так:

A(int i) : B(i) {}

Бит после двоеточия означает «инициализировать подобъект базового класса B этого объекта, используя его конструктор int со значением i».

Полагаю, вы не предоставили инициализатор для B, и поэтому по умолчанию компилятор пытается инициализировать его с помощью несуществующего конструктора no-args.

7 голосов
/ 15 сентября 2010

Вам нужно вызвать базовый конструктор через список инициализаторов вашего класса.

Пример:

class C : public B
{
public:
    C(int x) : B(x)
    {
    }

};

Если вы не инициализируете B явно, он попытается использовать конструктор по умолчанию, который не имеет параметров.

...