2010-06-18 2 views
3

Я создаю некоторые пользовательские классы исключений, выполнив следующие действияНет подходящего конструктора по умолчанию. (При создании дочернего класса)

class GXException 
{ 
public: 
    GXException(LPCWSTR pTxt):pReason(pTxt){}; 
    LPCWSTR pReason; 
}; 

class GXVideoException : GXException 
{ 
public: 
    GXVideoException(LPCWSTR pTxt):pReason(pTxt){}; 
    LPCWSTR pReason; 
}; 

Когда я создал GXVideoException продлить GXException, я получаю следующую ошибку

1>c:\users\numerical25\desktop\intro todirectx\godfiles\gxrendermanager\gxrendermanager\gxrendermanager\gxexceptions.h(14) : error C2512: 'GXException' : no appropriate default constructor available 
+0

Любые особые причины использования частного наследования? – 2010-06-18 14:53:00

ответ

4

Вам необходимо позвонить ваш конструктор базового класса внутри списка инициализаторов производного конструктора. Кроме того, поскольку вы извлекаете из базового класса, вы не должны переопределять вторую переменную с тем же именем (pReason).

class GXException 
{ 
public: 
    GXException(LPCWSTR pTxt):pReason(pTxt){}; 
    LPCWSTR pReason; 
}; 

class GXVideoException : GXException 
{ 
public: 
    GXVideoException(LPCWSTR pTxt) 
    : GXException(pTxt) 
    {} 
}; 
+0

О, я никогда не знал этого. Поэтому в любое время мой базовый класс принимает аргументы в его конструкторе, мне нужно вызвать его из родительского класса? – numerical25

+0

@ numerical25: Да, если вы не укажете один, он попытается вызвать базовый конструктор без параметров. В вашем случае у вас нет такой ошибки. –

0

Вы, вероятно, нужен просто конструктор по умолчанию:

class GXException 
{ 
public: 
    GXException() : pReason("") {}; 
    GXException(LPCWSTR pTxt):pReason(pTxt){}; 
    LPCWSTR pReason; 
}; 

Или, как говорит Брайан, вызовите базовый конструктор из производного исключения.

1

Ответ Брайана верен, но мне также полезно определить «унаследованный» тип, чтобы у меня не было слишком много ссылок на родительский класс для поддержки, в случае изменения иерархии.

class GXVideoException : GXException 
{ 
private: 
    typedef GXEception inherited; 
public: 
    GXVideoException(LPCWSTR pTxt) 
    : inherited(pTxt) 
    {} 
}; 
Смежные вопросы