Возможный дубликат:
Что это за странный синтаксис двоеточия в конструкторе?
У меня есть следующий базовый класс и производный класс;
class P {
int n;
public:
P( int id );
virtual int getn();
virtual int toss( int x ) = 0;
};
class RNP : public P {
int n;
public:
RNP( int id);
int toss( int x );
};
Я создал конструктор для RNP, но когда я компилирую, я получаю ошибку
player.cc:9:11: error: constructor for 'RNP' must explicitly initialize the base class 'P' which does not have a default constructor
Как именно я инициализирую базовый класс в производном классе?
Просто вызывая его конструктор. Это можно сделать в списке инициализации, где вы определяете RNP::RNP
:
RNP::RNP( int id )
:
P( id )
{
//...
}
Обычно вам нужно сделать это в конструкторе производного класса с помощью оператора «::»
С помощью : после аргументов конструктора производного класса
RNP::RNP( int id): P (id)
{
//do your stuff
}