Класс унаследован от класса без конструктора по умолчанию

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

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

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


person wrongusername    schedule 15.09.2010    source источник
comment
Пожалуйста, опубликуйте свой текущий код   -  person Ramon Zarazua B.    schedule 15.09.2010
comment
@Рамон Заразуа - почему? Я уже получил ответ...   -  person wrongusername    schedule 16.09.2010
comment
@wrongusername Потому что Stackoverflow является коллективным и стремится помочь большему количеству людей, чем просто спрашивающим. Люди с такой же проблемой будут искать этот вопрос и использовать ответы для решения своей проблемы. Но для этого им нужно знать, что их проблема такая же, как и ваша. Предоставляя код, демонстрирующий вашу проблему, другие люди могут гораздо проще и быстрее определить, применим ли к ним вопрос (и, в конечном счете, ответы).   -  person Ted Klein Bergman    schedule 20.08.2018


Ответы (2)


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

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

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

Я предполагаю, что вы не предоставили инициализатор для B, и, следовательно, по умолчанию компилятор пытается инициализировать его с помощью несуществующего конструктора без аргументов.

person Steve Jessop    schedule 15.09.2010
comment
Спасибо, что объяснил, что это значит, Стив! Я не знал, что есть инициализатор - person wrongusername; 15.09.2010

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

Пример:

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

};

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

person Brian R. Bondy    schedule 15.09.2010