нет подходящего конструктора по умолчанию. (при создании дочернего класса) - PullRequest
3 голосов
/ 18 июня 2010

Я создаю несколько пользовательских классов исключений, выполняя следующие действия:

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

Ответы [ 3 ]

4 голосов
/ 18 июня 2010

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

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

class GXVideoException : GXException
{
public:
    GXVideoException(LPCWSTR pTxt)
    : GXException(pTxt)
    {}
};
1 голос
/ 18 июня 2010

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

class GXVideoException : GXException
{
private:
    typedef GXEception inherited;
public:
    GXVideoException(LPCWSTR pTxt)
    : inherited(pTxt)
    {}
};
0 голосов
/ 18 июня 2010

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...