Ошибка конструктора базового класса

Возможный дубликат:
Что это за странный синтаксис двоеточия в конструкторе?

У меня есть следующий базовый класс и производный класс;

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

Как именно я инициализирую базовый класс в производном классе?

0

Решение

Просто вызывая его конструктор. Это можно сделать в списке инициализации, где вы определяете RNP::RNP:

RNP::RNP( int id )
:
P( id )
{
//...
}
1

Другие решения

Обычно вам нужно сделать это в конструкторе производного класса с помощью оператора «::»

0

С помощью : после аргументов конструктора производного класса

RNP::RNP(  int id): P (id)
{
//do your stuff
}
0