Skip to main content
GameDev.net gamedev.net
🔒 Locked

C2259

Started by ratha Sep 15, 2010 at 3:30 AM 2 replies 1.2k views
Original Post
ratha
ratha
Hi!
I got the following error:

Error 1 error C2259: 'irr::gui::CImageGUISkin' : cannot instantiate abstract class d:\klagui\source\main.cpp 27

I checked the CImageGUISkin class for pure virtual functions. It has no pure virtual functions. Then why this error comes? How to resolve this error?

ratha
ratha
Here it is:

class CImageGUISkin : public IGUISkin{public:    CImageGUISkin( video::IVideoDriver* videoDriver, IGUISkin* fallbackSkin );    virtual ~CImageGUISkin();    void loadConfig( const SImageGUISkinConfig& config );    //! returns default color    virtual video::SColor getColor(EGUI_DEFAULT_COLOR color) const;    //! sets a default color    virtual void setColor(EGUI_DEFAULT_COLOR which, video::SColor newColor);    //! returns default color    virtual s32 getSize(EGUI_DEFAULT_SIZE size) const;    //! Returns a default text.     virtual const wchar_t* getDefaultText(EGUI_DEFAULT_TEXT text) const;    //! Sets a default text.    virtual void setDefaultText(EGUI_DEFAULT_TEXT which, const wchar_t* newText);    //! sets a default size    virtual void setSize(EGUI_DEFAULT_SIZE which, s32 size);    //! returns the default font    virtual IGUIFont* getFont(EGUI_DEFAULT_FONT defaultFont) const;    //! sets a default font    virtual void setFont(IGUIFont* font, EGUI_DEFAULT_FONT defaultFont);    //! returns the sprite bank    virtual IGUISpriteBank* getSpriteBank() const;    //! sets the sprite bank    virtual void setSpriteBank(IGUISpriteBank* bank);    virtual u32 getIcon(EGUI_DEFAULT_ICON icon) const;    virtual void setIcon(EGUI_DEFAULT_ICON icon, u32 index);    virtual void draw3DButtonPaneStandard(IGUIElement* element,            const core::rect<s32>& rect,            const core::rect<s32>* clip=0);    virtual void draw3DButtonPanePressed(IGUIElement* element,             const core::rect<s32>& rect,            const core::rect<s32>* clip=0);    virtual void draw3DSunkenPane(IGUIElement* element,            video::SColor bgcolor, bool flat, bool fillBackGround,            const core::rect<s32>& rect,            const core::rect<s32>* clip=0);    virtual core::rect<s32> draw3DWindowBackground(IGUIElement* element,            bool drawTitleBar, video::SColor titleBarColor,            const core::rect<s32>& rect,            const core::rect<s32>* clip=0);    virtual void draw3DMenuPane(IGUIElement* element,            const core::rect<s32>& rect,            const core::rect<s32>* clip=0);    virtual void draw3DToolBar(IGUIElement* element,            const core::rect<s32>& rect,            const core::rect<s32>* clip=0);    virtual void draw3DTabButton(IGUIElement* element, bool active,            const core::rect<s32>& rect, const core::rect<s32>* clip=0);    virtual void draw3DTabBody(IGUIElement* element, bool border, bool background,            const core::rect<s32>& rect, const core::rect<s32>* clip=0);    virtual void drawIcon(IGUIElement* element, EGUI_DEFAULT_ICON icon,            const core::position2di position, u32 starttime=0, u32 currenttime=0,             bool loop=false, const core::rect<s32>* clip=0);    virtual void drawHorizontalProgressBar( IGUIElement* element, const core::rect<s32>& rectangle, const core::rect<s32>* clip,            f32 filledRatio, video::SColor fillColor );	virtual void draw2DRectangle(IGUIElement* element, const video::SColor &color, 		const core::rect<s32>& pos, const core::rect<s32>* clip = 0);private:    void drawElementStyle( const SImageGUIElementStyle& elem, const core::rect<s32>& rect, const core::rect<s32>* clip, video::SColor* color=0 );    video::IVideoDriver* VideoDriver;    IGUISkin* FallbackSkin;    SImageGUISkinConfig Config;};


But this class is derived from another class that has pure virtual functions. If I try to override one of them, I got the following errors:

Error 7 error C2084: function 'irr::video::SColor irr::gui::CImageGUISkin::getColor(irr::gui::EGUI_DEFAULT_COLOR) const' already has a body d:\klagui\source\cimageguiskin.cpp 327
Error 2 error C2143: syntax error : missing ';' before 'irr::gui::CImageGUISkin::getColor' d:\klagui\source\cimageguiskin.cpp 326
Error 1 error C2259: 'irr::gui::CImageGUISkin' : cannot instantiate abstract class d:\klagui\source\main.cpp 27
Error 6 error C2371: 'irr::gui::CImageGUISkin::getColor' : redefinition; different basic types d:\klagui\source\cimageguiskin.cpp 327
Error 5 error C2556: 'int irr::gui::CImageGUISkin::getColor(irr::gui::EGUI_DEFAULT_COLOR) const' : overloaded function differs only by return type from 'irr::video::SColor irr::gui::CImageGUISkin::getColor(irr::gui::EGUI_DEFAULT_COLOR) const' d:\klagui\source\cimageguiskin.cpp 327
Error 3 error C4430: missing type specifier - int assumed. Note: C++ does not support default-int d:\klagui\source\cimageguiskin.cpp 326
Error 4 error C4430: missing type specifier - int assumed. Note: C++ does not support default-int d:\klagui\source\cimageguiskin.cpp 327

This is how I override the function:
SColor CImageGUISkin::getColor(EGUI_DEFAULT_COLOR color) const{}


It's defined in the parent class file like this:

 virtual video::SColor getColor(EGUI_DEFAULT_COLOR color) const = 0; 
Zipster
Zipster
It looks like you're missing the namespace on SColor when you define the function, and it should be video::SColor.

Topic Locked

This topic has been locked by a moderator. New replies are not allowed.

Sign in to reply to this topic.