У базового 'CCSPNameData' нет конструктора по умолчанию — надо вызывать его явно, например:
CCSPNameData2::CCSPNameData2() : CCSPNameData(1,2,3) {}
Здравствуйте, <Аноним>, Вы писали:
А>это как?
А>поясните ...
А>где, что и как?
Например,
class A
{
public:
A (int a){...};
}
class B: public A
{
public:
B(): A(0) {...};
B(int b): A(b) {...};
}
Надо вызывать конструктор базового класса.
... << RSDN@Home 1.1 beta 1 >>
Здравствуйте, Jenyay, Вы писали:
J>Здравствуйте, <Аноним>, Вы писали:
А>>это как?
А>>поясните ...
А>>где, что и как?
J>Например,
J>J>class A
J>{
J>public:
J> A (int a){...};
J>}
J>class B: public A
J>{
J>public:
J> B(): A(0) {...};
J> B(int b): A(b) {...};
J>}
J>
J>Надо вызывать конструктор базового класса.
сделал. не получается.
все та же ошибка ...
Здравствуйте, Аноним, Вы писали:
А>сделал. не получается.
А>все та же ошибка ...
Ситуация, скорее всего, такая:
class CBase
{
public:
CBase (int ai_iParam); // конструктор с параметрами.
// Возможная проблема: в объявлении базового класса отсутствует конструктор по умолчанию (без параметров)
};
class CDerived : public CBase
{
public:
CDerived (int ai_iParam);
};
Дело в том, что последовательность вызовов конструкторов при создании объекта класса CDerived такова: сначала выполняется конструктор базового класса (CBase), потом — производного (CDerived). По умолчанию (без явного указания) в CBase должен выполнится именно конструктор по умолчанию (без параметров), а его нет, отсюда — ошибка компиляции. Необходимо либо добавить в CBase конструктор по умолчанию, либо явно указать в конструкторе CDerived, какой конструктор класса CBase вызывать.Как сделать первое — очевидно, а второе делается так:
CDerived::CDerived (int ai_iParam) : CBase (ai_iParam) // после последнего двоеточия указан конкретный конструктор
{
// CDerived construction code
}
Удачи!