Не могу создать конструктор ...
От: Аноним  
Дата: 11.08.03 05:35
Оценка:
мой класс наследник 'CCSPNameData'
при попытке создать конструктор класса, производного от 'CCSPNameData'
выдает ошибку
error C2512: 'CCSPNameData' : no appropriate default constructor available
в чем дело?
Re: Не могу создать конструктор ...
От: sercher Украина  
Дата: 11.08.03 05:39
Оценка:
У базового 'CCSPNameData' нет конструктора по умолчанию — надо вызывать его явно, например:

CCSPNameData2::CCSPNameData2() : CCSPNameData(1,2,3) {}
Re[2]: Не могу создать конструктор ...
От: Аноним  
Дата: 11.08.03 06:21
Оценка:
Здравствуйте, sercher, Вы писали:


S>У базового 'CCSPNameData' нет конструктора по умолчанию — надо вызывать его явно, например:


S>CCSPNameData2::CCSPNameData2() : CCSPNameData(1,2,3) {}


это как?
поясните ...
где, что и как?
Re[3]: Не могу создать конструктор ...
От: Jenyay http://jenyay.net
Дата: 11.08.03 07:33
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>это как?

А>поясните ...
А>где, что и как?

Например,

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 >>
Софт, исходники и фото
Re[4]: Не могу создать конструктор ...
От: Аноним  
Дата: 11.08.03 08:13
Оценка:
Здравствуйте, 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>Надо вызывать конструктор базового класса.


сделал. не получается.
все та же ошибка ...
Re[5]: Не могу создать конструктор ...
От: sercher Украина  
Дата: 11.08.03 08:30
Оценка:
А>сделал. не получается.
А>все та же ошибка ...

Код в студию, телепаты в отпуске.
Re[5]: Не могу создать конструктор ...
От: Gwynn Россия  
Дата: 11.08.03 08:54
Оценка:
Здравствуйте, Аноним, Вы писали:

А>сделал. не получается.

А>все та же ошибка ...

Ситуация, скорее всего, такая:


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
}

Удачи!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.