Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

no appropriate default constructor available . (when creating a child class)

I am creating some custom exception classes doing the following

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

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

When I created GXVideoException to extend GXException, I get the following error

1>c:\users\numerical25\desktop\intro todirectx\godfiles\gxrendermanager\gxrendermanager\gxrendermanager\gxexceptions.h(14) : error C2512: 'GXException' : no appropriate default constructor available
like image 905
numerical25 Avatar asked Mar 23 '26 11:03

numerical25


2 Answers

You need to call your base class constructor inside your derived constructor's initializer list. Also since you are deriving from the base class you should not redeclare a second variable by the same name (pReason).

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

class GXVideoException : GXException
{
public:
    GXVideoException(LPCWSTR pTxt)
    : GXException(pTxt)
    {}
};
like image 151
Brian R. Bondy Avatar answered Mar 25 '26 01:03

Brian R. Bondy


Brian's answer is correct, but I also find it helpful to define an 'inherited' type so that I don't have too many references to the parent class to maintain, in case the hierarchy changes.

class GXVideoException : GXException
{
private:
    typedef GXEception inherited;
public:
    GXVideoException(LPCWSTR pTxt)
    : inherited(pTxt)
    {}
};
like image 25
Roddy Avatar answered Mar 25 '26 00:03

Roddy



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!