implements?



  • Und welches Element vermisst der Compiler da?



  • ah hatte nicht gesehen, dass das zum fehler gehört:

    e:\uni\code\pixgraph\sdl_dropdown.h(42) : error C2259: "SDL_Button" : Instanz von abstrakter Klasse kann aufgrund nachfolgender Elemente nicht erstellt werden:
            e:\uni\code\pixgraph\sdl_button.h(10) : Siehe Deklaration von 'SDL_Button'
    e:\uni\code\pixgraph\sdl_dropdown.h(42) : warning C4259: 'void __thiscall SDL_Input::sendEvent(union SDL_Event *) const' : Rein virtuelle Funktion wurde nicht definiert
            e:\uni\code\pixgraph\sdl_input.h(9) : Siehe Deklaration von 'sendEvent'
    e:\uni\code\pixgraph\sdl_dropdown.h(42) : warning C4259: 'void __thiscall SDL_Input::setState(int) const' : Rein virtuelle Funktion wurde nicht definiert
            e:\uni\code\pixgraph\sdl_input.h(10) : Siehe Deklaration von 'setState'
    e:\uni\code\pixgraph\sdl_dropdown.h(42) : warning C4259: 'class Vektor __thiscall SDL_Input::getPos(void) const' : Rein virtuelle Funktion wurde nicht definiert
            e:\uni\code\pixgraph\sdl_input.h(11) : Siehe Deklaration von 'getPos'
    e:\uni\code\pixgraph\sdl_dropdown.h(42) : warning C4259: 'class Vektor __thiscall SDL_Input::getSize(void) const' : Rein virtuelle Funktion wurde nicht definiert
            e:\uni\code\pixgraph\sdl_input.h(12) : Siehe Deklaration von 'getSize'
    e:\uni\code\pixgraph\sdl_dropdown.h(42) : warning C4259: 'void __thiscall SDL_Input::setPos(int,int) const' : Rein virtuelle Funktion wurde nicht definiert
            e:\uni\code\pixgraph\sdl_input.h(14) : Siehe Deklaration von 'setPos'
    e:\uni\code\pixgraph\sdl_dropdown.h(42) : warning C4259: 'void __thiscall SDL_Input::setPos(class Vektor) const' : Rein virtuelle Funktion wurde nicht definiert
            e:\uni\code\pixgraph\sdl_input.h(13) : Siehe Deklaration von 'setPos'
    e:\uni\code\pixgraph\sdl_dropdown.h(42) : warning C4259: 'class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __thiscall SDL_Input::getLabel(void) const' : Rein virtuelle Funktion wurde nicht definiert
            e:\uni\code\pixgraph\sdl_input.h(15) : Siehe Deklaration von 'getLabel'
    e:\uni\code\pixgraph\sdl_dropdown.h(42) : warning C4259: 'void __thiscall SDL_Input::setLabel(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >) const' : Rein virtuelle Funktion wurde nicht definiert
            e:\uni\code\pixgraph\sdl_input.h(16) : Siehe Deklaration von 'setLabel'
    e:\uni\code\pixgraph\sdl_dropdown.h(42) : warning C4259: 'void __thiscall SDL_Input::paint(struct SDL_Surface *) const' : Rein virtuelle Funktion wurde nicht definiert
            e:\uni\code\pixgraph\sdl_input.h(17) : Siehe Deklaration von 'paint'
    

    die ganzen funktionen sind in SDL_Input virtuell und für SDL_Button sind sie definiert...



  • Also folgendes schluckt mein Compiler ohne Probleme:

    class a
    {
      public:
        virtual ~a() {}; // Bei Polymorphen Datentypen nicht vergessen!
        virtual void foo() = 0;
    };
    
    class b : public a
    {
      public:
        void foo();
        void bar();
    };
    
    void b::foo()
    {
      //bla
    }
    void b::bar()
    {
      //blub
    }
    
    int main()
    {
      b test;
    }
    

    cu André



  • hast du auch die ganzen const's beachtet? Die gehören zu der Methodendeklaration dazu (d.h. 'sendEvent(union SDL_Event) const;' und 'sendEvent(union SDL_Event);' sind zwei völlig verschiedene Methoden).



  • pixartist schrieb:

    die ganzen funktionen sind in SDL_Input virtuell und für SDL_Button sind sie definiert...

    Das kann aufgrund der Fehlermeldungen nicht stimmen. Ich rezitiere:

    pixartist schrieb:

    [cpp]
    e:\uni\code\pixgraph\sdl_dropdown.h(42) : error C2259: "SDL_Button" : Instanz von abstrakter Klasse kann aufgrund nachfolgender Elemente nicht erstellt werden:
    e:\uni\code\pixgraph\sdl_button.h(10) : Siehe Deklaration von 'SDL_Button'
    e:\uni\code\pixgraph\sdl_dropdown.h(42) : warning C4259: 'void __thiscall SDL_Input::sendEvent(union SDL_Event 😉 const' : Rein virtuelle Funktion wurde nicht definiert
    [/cpp]

    Vielleicht wäre es gut wenn du mal etwas mehr postest.

    cu André



  • #ifndef SDL_Input_h
    #define SDL_Input_h 1
    
    class SDL_Input
    {
    public:
    	//cton
    	typedef void ( *action )(SDL_Event *e);
    	virtual void sendEvent(SDL_Event *event) = 0;
    	virtual void setState(int s) = 0;
    	virtual Vektor getPos() = 0;
    	virtual Vektor getSize() = 0;
    	virtual void setPos(Vektor v) = 0;
    	virtual void setPos(int x, int y) = 0; 
    	virtual std::string getLabel() = 0;
    	virtual void setLabel(std::string nLabel) = 0;
    	virtual void paint(SDL_Surface *to) = 0;
    	virtual ~SDL_Input();
    	bool active;
    
    };
    #endif
    
    #ifndef SDL_Button_h
    #define SDL_Button_h 1
    #include "SDL/SDL.h"
    #include "SDL/SDL_ttf.h"
    #include <string>
    #include "Vektor.h"
    #include "SDL_SurfaceWrapper.h"
    #include "SDL_Input.h"
    
    class SDL_Button : public SDL_Input
    {
    public:
    	//cton
    	typedef void ( *action )(SDL_Event *e);
    	SDL_Button();
    	SDL_Button(SDL_SurfaceWrapper sNormal, SDL_SurfaceWrapper sHover, SDL_SurfaceWrapper sPressed,
    		std::string label, TTF_Font *font, SDL_Color fColor, Vektor textAlign,
    		action onPress, Vektor pos);
    
    	//void sendEvent(SDL_Event *event);
    	//void setState(int s);
    	//Vektor getPos();
    	//Vektor getSize();
    	//void setPos(Vektor v);
    	//void setPos(int x, int y);
    	//std::string getLabel();
    	//void setLabel(std::string nLabel);
    	//void paint(SDL_Surface *to);
    	virtual ~SDL_Button();
    	//bool active;
    	bool setHoverState(Vektor mousePos);
    	bool setPressedState(Vektor mousePos);
    	bool setClickedState(Vektor mousePos);
    private:
    
    	Vektor textAlign;
    	TTF_Font *lFont;
    	SDL_Color lColor;
    	SDL_SurfaceWrapper sNormal;
    	SDL_SurfaceWrapper sHover;
    	SDL_SurfaceWrapper sPressed;
    	SDL_SurfaceWrapper sLabel;
    	std::string label;
    	action onPress;
    	Vektor pos;
    	int state; //0-> normal, 1-> hover, 2-> pressed
    };
    #endif
    
    #include "SDL_Button.h"
    SDL_Button::SDL_Button()
    {
    }
    SDL_Button::SDL_Button(SDL_SurfaceWrapper sNormal, SDL_SurfaceWrapper sHover, SDL_SurfaceWrapper sPressed,
    					   std::string label, TTF_Font *font, SDL_Color fColor, Vektor textAlign,
    					   action onPress, Vektor pos)
    {
    	this->sNormal = sNormal;
    	this->sHover = sHover;
    	this->sPressed = sPressed;
    	this->label = label;
    	this->onPress = onPress;
    	this->pos = pos;
    	this->state = 0;
    	this->lFont = font;
    	this->lColor = fColor;
    	this->textAlign = textAlign;
    	SDL_Surface *l = TTF_RenderText_Solid(this->lFont, this->label.c_str(),this->lColor);
    	if(l!=NULL)
    	{
    		l = SDL_ConvertSurface(l, sNormal.surface->format, SDL_SWSURFACE);
    	}
    
    	sLabel = SDL_SurfaceWrapper(l);
    	active = true;
    
    }
    void SDL_Button::sendEvent(SDL_Event *event)
    {
    	if( event->type == SDL_MOUSEBUTTONDOWN )
    	{
    		if( event->button.button == SDL_BUTTON_LEFT )
    			setPressedState(Vektor(event->button.x, event->button.y));
    	}
    	else if( event->type == SDL_MOUSEBUTTONUP )
    	{
    		if( event->button.button == SDL_BUTTON_LEFT )
    			setClickedState(Vektor(event->button.x, event->button.y));
    	}
    	else if( event->type == SDL_MOUSEMOTION)
    	{
    		setHoverState(Vektor(event->motion.x, event->motion.y));
    	}
    	if(onPress != NULL)
    		onPress(event);
    }
    
    bool SDL_Button::setHoverState(Vektor mousePos)
    {	
    	if(active)
    	{
    		SDL_Surface *cSurf;
    		switch(state)
    		{
    		case 0:
    			cSurf = sNormal.surface;
    			break;
    		case 1:
    			cSurf = sHover.surface;
    			break;
    		case 2:
    			cSurf = sPressed.surface;
    			break;
    		default:
    			cSurf = sNormal.surface;
    			break;
    		};
    		if(mousePos.x > pos.x && mousePos.x < pos.x+cSurf->w)
    		{
    			if(mousePos.y > pos.y && mousePos.y < pos.y+cSurf->h)
    			{
    				state = 1;
    				return true;
    			}
    			else
    				state = 0;
    		}
    		else
    		{
    			state = 0;
    		}
    	}
    	else
    		state = 0;
    	return false;
    }
    bool SDL_Button::setPressedState(Vektor mousePos)
    {
    	if(active)
    	{
    		SDL_Surface *cSurf;
    		switch(state)
    		{
    		case 0:
    			cSurf = sNormal.surface;
    			break;
    		case 1:
    			cSurf = sHover.surface;
    			break;
    		case 2:
    			cSurf = sPressed.surface;
    			break;
    		default:
    			cSurf = sNormal.surface;
    			break;
    		};
    		if(mousePos.x > pos.x && mousePos.x < pos.x+cSurf->w)
    		{
    			if(mousePos.y > pos.y && mousePos.y < pos.y+cSurf->h)
    			{
    				state = 2;
    				return true;
    			}
    			else
    				state = 0;
    		}
    		else
    		{
    			state = 0;
    		}
    	}
    	else
    		state = 0;
    	return false;
    }
    bool SDL_Button::setClickedState(Vektor mousePos)
    {
    	if(active)
    	{
    		SDL_Surface *cSurf;
    		switch(state)
    		{
    		case 0:
    			cSurf = sNormal.surface;
    			break;
    		case 1:
    			cSurf = sHover.surface;
    			break;
    		case 2:
    			cSurf = sPressed.surface;
    			break;
    		default:
    			cSurf = sNormal.surface;
    			break;
    		};
    		if(mousePos.x > pos.x && mousePos.x < pos.x+cSurf->w)
    		{
    			if(mousePos.y > pos.y && mousePos.y < pos.y+cSurf->h)
    			{
    				state = 1;
    				return true;
    			}
    			else
    				state = 0;
    		}
    		else
    		{
    			state = 0;
    		}
    	}
    	else
    		state = 0;
    	return false;
    }
    void SDL_Button::setState(int s)
    {
    	state = s;
    }
    Vektor SDL_Button::getPos()
    {
    	return pos;
    }
    Vektor SDL_Button::getSize()
    {
    	return Vektor(sNormal.surface->w, sNormal.surface->h);
    }
    void SDL_Button::setPos(Vektor v)
    {
    	pos = v;
    }
    void SDL_Button::setPos(int x, int y)
    {
    	pos.x = x;
    	pos.y = y;
    }
    std::string SDL_Button::getLabel()
    {
    	return label;
    }
    void SDL_Button::setLabel(std::string nLabel)
    {
    	label = nLabel;
    }
    void SDL_Button::paint(SDL_Surface *to)
    {
    	if(active)
    	{
    		int w,h;
    		SDL_SetColorKey(sLabel.surface, SDL_RLEACCEL | SDL_SRCCOLORKEY, 0);
    		switch(state)
    		{
    		case 0:
    			w = (sNormal.surface->w - sLabel.surface->w)/2;
    			h = (sNormal.surface->h - sLabel.surface->h)/2;
    			sNormal.blitTo(to, pos.x, pos.y);
    			sLabel.blitTo(to, pos.x+w+textAlign.x, pos.y+h+textAlign.y);
    			break;
    		case 1:
    			w = (sHover.surface->w - sLabel.surface->w)/2;
    			h = (sHover.surface->h - sLabel.surface->h)/2;
    			sHover.blitTo(to, pos.x, pos.y);
    			sLabel.blitTo(to, pos.x+w+textAlign.x, pos.y+h+textAlign.y);
    			break;
    		case 2:
    			w = (sPressed.surface->w - sLabel.surface->w)/2;
    			h = (sPressed.surface->h - sLabel.surface->h)/2;
    			sPressed.blitTo(to, pos.x, pos.y);
    			sLabel.blitTo(to, pos.x+w+textAlign.x, pos.y+h+textAlign.y);
    			break;
    		default:
    			w = (sNormal.surface->w - sLabel.surface->w)/2;
    			h = (sNormal.surface->h - sLabel.surface->h)/2;
    			sNormal.blitTo(to, pos.x, pos.y);
    			sLabel.blitTo(to, pos.x+w+textAlign.x, pos.y+h+textAlign.y);
    			break;
    		};
    	}
    }
    SDL_Button::~SDL_Button()
    {
    
    }
    

    achtung: ich stelle das programm grad um (vorher gabs die klasse input nicht und auch keine vererbung) sind also auch noch andere fehler drin...

    fehlermeldungen hier:

    --------------------Konfiguration: PixGraph - Win32 Debug--------------------
    Kompilierung läuft...
    main.cpp
    e:\uni\code\pixgraph\sdl_dropdown.h(42) : error C2259: "SDL_Button" : Instanz von abstrakter Klasse kann aufgrund nachfolgender Elemente nicht erstellt werden:
    e:\uni\code\pixgraph\sdl_button.h(10) : Siehe Deklaration von 'SDL_Button'
    e:\uni\code\pixgraph\sdl_dropdown.h(42) : warning C4259: 'void __thiscall SDL_Input::sendEvent(union SDL_Event *)' : Rein virtuelle Funktion wurde nicht definiert
    e:\uni\code\pixgraph\sdl_input.h(9) : Siehe Deklaration von 'sendEvent'
    e:\uni\code\pixgraph\sdl_dropdown.h(42) : warning C4259: 'void __thiscall SDL_Input::setState(int)' : Rein virtuelle Funktion wurde nicht definiert
    e:\uni\code\pixgraph\sdl_input.h(10) : Siehe Deklaration von 'setState'
    e:\uni\code\pixgraph\sdl_dropdown.h(42) : warning C4259: 'class Vektor __thiscall SDL_Input::getPos(void)' : Rein virtuelle Funktion wurde nicht definiert
    e:\uni\code\pixgraph\sdl_input.h(11) : Siehe Deklaration von 'getPos'
    e:\uni\code\pixgraph\sdl_dropdown.h(42) : warning C4259: 'class Vektor __thiscall SDL_Input::getSize(void)' : Rein virtuelle Funktion wurde nicht definiert
    e:\uni\code\pixgraph\sdl_input.h(12) : Siehe Deklaration von 'getSize'
    e:\uni\code\pixgraph\sdl_dropdown.h(42) : warning C4259: 'void __thiscall SDL_Input::setPos(int,int)' : Rein virtuelle Funktion wurde nicht definiert
    e:\uni\code\pixgraph\sdl_input.h(14) : Siehe Deklaration von 'setPos'
    e:\uni\code\pixgraph\sdl_dropdown.h(42) : warning C4259: 'void __thiscall SDL_Input::setPos(class Vektor)' : Rein virtuelle Funktion wurde nicht definiert
    e:\uni\code\pixgraph\sdl_input.h(13) : Siehe Deklaration von 'setPos'
    e:\uni\code\pixgraph\sdl_dropdown.h(42) : warning C4259: 'class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __thiscall SDL_Input::getLabel(void)' : Rein virtuelle Funktion wurde nicht definiert
    e:\uni\code\pixgraph\sdl_input.h(15) : Siehe Deklaration von 'getLabel'
    e:\uni\code\pixgraph\sdl_dropdown.h(42) : warning C4259: 'void __thiscall SDL_Input::setLabel(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)' : Rein virtuelle Funktion wurde nicht definiert
    e:\uni\code\pixgraph\sdl_input.h(16) : Siehe Deklaration von 'setLabel'
    e:\uni\code\pixgraph\sdl_dropdown.h(42) : warning C4259: 'void __thiscall SDL_Input::paint(struct SDL_Surface *)' : Rein virtuelle Funktion wurde nicht definiert
    e:\uni\code\pixgraph\sdl_input.h(17) : Siehe Deklaration von 'paint'
    e:\programme\visual studio components\vc98\include\list(29) : error C2259: "SDL_Button" : Instanz von abstrakter Klasse kann aufgrund nachfolgender Elemente nicht erstellt werden:
    e:\uni\code\pixgraph\sdl_button.h(10) : Siehe Deklaration von 'SDL_Button'
    e:\uni\code\pixgraph\sdl_dropdown.h(43) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'std::list<class SDL_Button,class std::allocator<class SDL_Button> >'
    e:\programme\visual studio components\vc98\include\list(29) : warning C4259: 'void __thiscall SDL_Input::sendEvent(union SDL_Event *)' : Rein virtuelle Funktion wurde nicht definiert
    e:\uni\code\pixgraph\sdl_input.h(9) : Siehe Deklaration von 'sendEvent'
    e:\uni\code\pixgraph\sdl_dropdown.h(43) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'std::list<class SDL_Button,class std::allocator<class SDL_Button> >'
    e:\programme\visual studio components\vc98\include\list(29) : warning C4259: 'void __thiscall SDL_Input::setState(int)' : Rein virtuelle Funktion wurde nicht definiert
    e:\uni\code\pixgraph\sdl_input.h(10) : Siehe Deklaration von 'setState'
    e:\uni\code\pixgraph\sdl_dropdown.h(43) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'std::list<class SDL_Button,class std::allocator<class SDL_Button> >'
    e:\programme\visual studio components\vc98\include\list(29) : warning C4259: 'class Vektor __thiscall SDL_Input::getPos(void)' : Rein virtuelle Funktion wurde nicht definiert
    e:\uni\code\pixgraph\sdl_input.h(11) : Siehe Deklaration von 'getPos'
    e:\uni\code\pixgraph\sdl_dropdown.h(43) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'std::list<class SDL_Button,class std::allocator<class SDL_Button> >'
    e:\programme\visual studio components\vc98\include\list(29) : warning C4259: 'class Vektor __thiscall SDL_Input::getSize(void)' : Rein virtuelle Funktion wurde nicht definiert
    e:\uni\code\pixgraph\sdl_input.h(12) : Siehe Deklaration von 'getSize'
    e:\uni\code\pixgraph\sdl_dropdown.h(43) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'std::list<class SDL_Button,class std::allocator<class SDL_Button> >'
    e:\programme\visual studio components\vc98\include\list(29) : warning C4259: 'void __thiscall SDL_Input::setPos(int,int)' : Rein virtuelle Funktion wurde nicht definiert
    e:\uni\code\pixgraph\sdl_input.h(14) : Siehe Deklaration von 'setPos'
    e:\uni\code\pixgraph\sdl_dropdown.h(43) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'std::list<class SDL_Button,class std::allocator<class SDL_Button> >'
    e:\programme\visual studio components\vc98\include\list(29) : warning C4259: 'void __thiscall SDL_Input::setPos(class Vektor)' : Rein virtuelle Funktion wurde nicht definiert
    e:\uni\code\pixgraph\sdl_input.h(13) : Siehe Deklaration von 'setPos'
    e:\uni\code\pixgraph\sdl_dropdown.h(43) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'std::list<class SDL_Button,class std::allocator<class SDL_Button> >'
    e:\programme\visual studio components\vc98\include\list(29) : warning C4259: 'class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __thiscall SDL_Input::getLabel(void)' : Rein virtuelle Funktion wurde nicht definie
    rt
    e:\uni\code\pixgraph\sdl_input.h(15) : Siehe Deklaration von 'getLabel'
    e:\uni\code\pixgraph\sdl_dropdown.h(43) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'std::list<class SDL_Button,class std::allocator<class SDL_Button> >'
    e:\programme\visual studio components\vc98\include\list(29) : warning C4259: 'void __thiscall SDL_Input::setLabel(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)' : Rein virtuelle Funktion wurde nicht definie
    rt
    e:\uni\code\pixgraph\sdl_input.h(16) : Siehe Deklaration von 'setLabel'
    e:\uni\code\pixgraph\sdl_dropdown.h(43) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'std::list<class SDL_Button,class std::allocator<class SDL_Button> >'
    e:\programme\visual studio components\vc98\include\list(29) : warning C4259: 'void __thiscall SDL_Input::paint(struct SDL_Surface *)' : Rein virtuelle Funktion wurde nicht definiert
    e:\uni\code\pixgraph\sdl_input.h(17) : Siehe Deklaration von 'paint'
    e:\uni\code\pixgraph\sdl_dropdown.h(43) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'std::list<class SDL_Button,class std::allocator<class SDL_Button> >'
    e:\programme\visual studio components\vc98\include\list(181) : error C2259: "SDL_Button" : Instanz von abstrakter Klasse kann aufgrund nachfolgender Elemente nicht erstellt werden:
    e:\uni\code\pixgraph\sdl_button.h(10) : Siehe Deklaration von 'SDL_Button'
    e:\uni\code\pixgraph\sdl_dropdown.h(43) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'std::list<class SDL_Button,class std::allocator<class SDL_Button> >'
    e:\programme\visual studio components\vc98\include\list(181) : warning C4259: 'void __thiscall SDL_Input::sendEvent(union SDL_Event *)' : Rein virtuelle Funktion wurde nicht definiert
    e:\uni\code\pixgraph\sdl_input.h(9) : Siehe Deklaration von 'sendEvent'
    e:\uni\code\pixgraph\sdl_dropdown.h(43) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'std::list<class SDL_Button,class std::allocator<class SDL_Button> >'
    e:\programme\visual studio components\vc98\include\list(181) : warning C4259: 'void __thiscall SDL_Input::setState(int)' : Rein virtuelle Funktion wurde nicht definiert
    e:\uni\code\pixgraph\sdl_input.h(10) : Siehe Deklaration von 'setState'
    e:\uni\code\pixgraph\sdl_dropdown.h(43) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'std::list<class SDL_Button,class std::allocator<class SDL_Button> >'
    e:\programme\visual studio components\vc98\include\list(181) : warning C4259: 'class Vektor __thiscall SDL_Input::getPos(void)' : Rein virtuelle Funktion wurde nicht definiert
    e:\uni\code\pixgraph\sdl_input.h(11) : Siehe Deklaration von 'getPos'
    e:\uni\code\pixgraph\sdl_dropdown.h(43) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'std::list<class SDL_Button,class std::allocator<class SDL_Button> >'
    e:\programme\visual studio components\vc98\include\list(181) : warning C4259: 'class Vektor __thiscall SDL_Input::getSize(void)' : Rein virtuelle Funktion wurde nicht definiert
    e:\uni\code\pixgraph\sdl_input.h(12) : Siehe Deklaration von 'getSize'
    e:\uni\code\pixgraph\sdl_dropdown.h(43) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'std::list<class SDL_Button,class std::allocator<class SDL_Button> >'
    e:\programme\visual studio components\vc98\include\list(181) : warning C4259: 'void __thiscall SDL_Input::setPos(int,int)' : Rein virtuelle Funktion wurde nicht definiert
    e:\uni\code\pixgraph\sdl_input.h(14) : Siehe Deklaration von 'setPos'
    e:\uni\code\pixgraph\sdl_dropdown.h(43) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'std::list<class SDL_Button,class std::allocator<class SDL_Button> >'
    e:\programme\visual studio components\vc98\include\list(181) : warning C4259: 'void __thiscall SDL_Input::setPos(class Vektor)' : Rein virtuelle Funktion wurde nicht definiert
    e:\uni\code\pixgraph\sdl_input.h(13) : Siehe Deklaration von 'setPos'
    e:\uni\code\pixgraph\sdl_dropdown.h(43) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'std::list<class SDL_Button,class std::allocator<class SDL_Button> >'
    e:\programme\visual studio components\vc98\include\list(181) : warning C4259: 'class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __thiscall SDL_Input::getLabel(void)' : Rein virtuelle Funktion wurde nicht defini
    ert
    e:\uni\code\pixgraph\sdl_input.h(15) : Siehe Deklaration von 'getLabel'
    e:\uni\code\pixgraph\sdl_dropdown.h(43) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'std::list<class SDL_Button,class std::allocator<class SDL_Button> >'
    e:\programme\visual studio components\vc98\include\list(181) : warning C4259: 'void __thiscall SDL_Input::setLabel(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)' : Rein virtuelle Funktion wurde nicht defini
    ert
    e:\uni\code\pixgraph\sdl_input.h(16) : Siehe Deklaration von 'setLabel'
    e:\uni\code\pixgraph\sdl_dropdown.h(43) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'std::list<class SDL_Button,class std::allocator<class SDL_Button> >'
    e:\programme\visual studio components\vc98\include\list(181) : warning C4259: 'void __thiscall SDL_Input::paint(struct SDL_Surface *)' : Rein virtuelle Funktion wurde nicht definiert
    e:\uni\code\pixgraph\sdl_input.h(17) : Siehe Deklaration von 'paint'
    e:\uni\code\pixgraph\sdl_dropdown.h(43) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'std::list<class SDL_Button,class std::allocator<class SDL_Button> >'
    e:\programme\visual studio components\vc98\include\functional(185) : error C2259: "SDL_Button" : Instanz von abstrakter Klasse kann aufgrund nachfolgender Elemente nicht erstellt werden:
    e:\uni\code\pixgraph\sdl_button.h(10) : Siehe Deklaration von 'SDL_Button'
    e:\programme\visual studio components\vc98\include\list(285) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'std::binder2nd<struct std::not_equal_to<class SDL_Button> >'
    e:\uni\code\pixgraph\sdl_dropdown.h(43) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'std::list<class SDL_Button,class std::allocator<class SDL_Button> >'
    e:\programme\visual studio components\vc98\include\functional(185) : warning C4259: 'void __thiscall SDL_Input::sendEvent(union SDL_Event *)' : Rein virtuelle Funktion wurde nicht definiert
    e:\uni\code\pixgraph\sdl_input.h(9) : Siehe Deklaration von 'sendEvent'
    e:\programme\visual studio components\vc98\include\list(285) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'std::binder2nd<struct std::not_equal_to<class SDL_Button> >'
    e:\uni\code\pixgraph\sdl_dropdown.h(43) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'std::list<class SDL_Button,class std::allocator<class SDL_Button> >'
    e:\programme\visual studio components\vc98\include\functional(185) : warning C4259: 'void __thiscall SDL_Input::setState(int)' : Rein virtuelle Funktion wurde nicht definiert
    e:\uni\code\pixgraph\sdl_input.h(10) : Siehe Deklaration von 'setState'
    e:\programme\visual studio components\vc98\include\list(285) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'std::binder2nd<struct std::not_equal_to<class SDL_Button> >'
    e:\uni\code\pixgraph\sdl_dropdown.h(43) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'std::list<class SDL_Button,class std::allocator<class SDL_Button> >'
    e:\programme\visual studio components\vc98\include\functional(185) : warning C4259: 'class Vektor __thiscall SDL_Input::getPos(void)' : Rein virtuelle Funktion wurde nicht definiert
    e:\uni\code\pixgraph\sdl_input.h(11) : Siehe Deklaration von 'getPos'
    e:\programme\visual studio components\vc98\include\list(285) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'std::binder2nd<struct std::not_equal_to<class SDL_Button> >'
    e:\uni\code\pixgraph\sdl_dropdown.h(43) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'std::list<class SDL_Button,class std::allocator<class SDL_Button> >'
    e:\programme\visual studio components\vc98\include\functional(185) : warning C4259: 'class Vektor __thiscall SDL_Input::getSize(void)' : Rein virtuelle Funktion wurde nicht definiert
    e:\uni\code\pixgraph\sdl_input.h(12) : Siehe Deklaration von 'getSize'
    e:\programme\visual studio components\vc98\include\list(285) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'std::binder2nd<struct std::not_equal_to<class SDL_Button> >'
    e:\uni\code\pixgraph\sdl_dropdown.h(43) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'std::list<class SDL_Button,class std::allocator<class SDL_Button> >'
    e:\programme\visual studio components\vc98\include\functional(185) : warning C4259: 'void __thiscall SDL_Input::setPos(int,int)' : Rein virtuelle Funktion wurde nicht definiert
    e:\uni\code\pixgraph\sdl_input.h(14) : Siehe Deklaration von 'setPos'
    e:\programme\visual studio components\vc98\include\list(285) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'std::binder2nd<struct std::not_equal_to<class SDL_Button> >'
    e:\uni\code\pixgraph\sdl_dropdown.h(43) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'std::list<class SDL_Button,class std::allocator<class SDL_Button> >'
    e:\programme\visual studio components\vc98\include\functional(185) : warning C4259: 'void __thiscall SDL_Input::setPos(class Vektor)' : Rein virtuelle Funktion wurde nicht definiert
    e:\uni\code\pixgraph\sdl_input.h(13) : Siehe Deklaration von 'setPos'
    e:\programme\visual studio components\vc98\include\list(285) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'std::binder2nd<struct std::not_equal_to<class SDL_Button> >'
    e:\uni\code\pixgraph\sdl_dropdown.h(43) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'std::list<class SDL_Button,class std::allocator<class SDL_Button> >'
    e:\programme\visual studio components\vc98\include\functional(185) : warning C4259: 'class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __thiscall SDL_Input::getLabel(void)' : Rein virtuelle Funktion wurde nicht
    definiert
    e:\uni\code\pixgraph\sdl_input.h(15) : Siehe Deklaration von 'getLabel'
    e:\programme\visual studio components\vc98\include\list(285) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'std::binder2nd<struct std::not_equal_to<class SDL_Button> >'
    e:\uni\code\pixgraph\sdl_dropdown.h(43) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'std::list<class SDL_Button,class std::allocator<class SDL_Button> >'
    e:\programme\visual studio components\vc98\include\functional(185) : warning C4259: 'void __thiscall SDL_Input::setLabel(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)' : Rein virtuelle Funktion wurde nicht
    definiert
    e:\uni\code\pixgraph\sdl_input.h(16) : Siehe Deklaration von 'setLabel'
    e:\programme\visual studio components\vc98\include\list(285) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'std::binder2nd<struct std::not_equal_to<class SDL_Button> >'
    e:\uni\code\pixgraph\sdl_dropdown.h(43) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'std::list<class SDL_Button,class std::allocator<class SDL_Button> >'
    e:\programme\visual studio components\vc98\include\functional(185) : warning C4259: 'void __thiscall SDL_Input::paint(struct SDL_Surface *)' : Rein virtuelle Funktion wurde nicht definiert
    e:\uni\code\pixgraph\sdl_input.h(17) : Siehe Deklaration von 'paint'
    e:\programme\visual studio components\vc98\include\list(285) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'std::binder2nd<struct std::not_equal_to<class SDL_Button> >'
    e:\uni\code\pixgraph\sdl_dropdown.h(43) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'std::list<class SDL_Button,class std::allocator<class SDL_Button> >'
    SDL_Button.cpp
    E:\Uni\code\PixGraph\SDL_Button.cpp(30) : error C2509: 'sendEvent' : Member-Funktion nicht in 'SDL_Button' deklariert
    e:\uni\code\pixgraph\sdl_button.h(10) : Siehe Deklaration von 'SDL_Button'
    E:\Uni\code\PixGraph\SDL_Button.cpp(167) : error C2509: 'setState' : Member-Funktion nicht in 'SDL_Button' deklariert
    e:\uni\code\pixgraph\sdl_button.h(10) : Siehe Deklaration von 'SDL_Button'
    E:\Uni\code\PixGraph\SDL_Button.cpp(171) : error C2509: 'getPos' : Member-Funktion nicht in 'SDL_Button' deklariert
    e:\uni\code\pixgraph\sdl_button.h(10) : Siehe Deklaration von 'SDL_Button'
    E:\Uni\code\PixGraph\SDL_Button.cpp(175) : error C2509: 'getSize' : Member-Funktion nicht in 'SDL_Button' deklariert
    e:\uni\code\pixgraph\sdl_button.h(10) : Siehe Deklaration von 'SDL_Button'
    E:\Uni\code\PixGraph\SDL_Button.cpp(179) : error C2509: 'setPos' : Member-Funktion nicht in 'SDL_Button' deklariert
    e:\uni\code\pixgraph\sdl_button.h(10) : Siehe Deklaration von 'SDL_Button'
    E:\Uni\code\PixGraph\SDL_Button.cpp(183) : error C2509: 'setPos' : Member-Funktion nicht in 'SDL_Button' deklariert
    e:\uni\code\pixgraph\sdl_button.h(10) : Siehe Deklaration von 'SDL_Button'
    E:\Uni\code\PixGraph\SDL_Button.cpp(188) : error C2509: 'getLabel' : Member-Funktion nicht in 'SDL_Button' deklariert
    e:\uni\code\pixgraph\sdl_button.h(10) : Siehe Deklaration von 'SDL_Button'
    E:\Uni\code\PixGraph\SDL_Button.cpp(192) : error C2509: 'setLabel' : Member-Funktion nicht in 'SDL_Button' deklariert
    e:\uni\code\pixgraph\sdl_button.h(10) : Siehe Deklaration von 'SDL_Button'
    E:\Uni\code\PixGraph\SDL_Button.cpp(196) : error C2509: 'paint' : Member-Funktion nicht in 'SDL_Button' deklariert
    e:\uni\code\pixgraph\sdl_button.h(10) : Siehe Deklaration von 'SDL_Button'
    SDL_Dropdown.cpp
    e:\uni\code\pixgraph\sdl_dropdown.h(42) : error C2259: "SDL_Button" : Instanz von abstrakter Klasse kann aufgrund nachfolgender Elemente nicht erstellt werden:
    e:\uni\code\pixgraph\sdl_button.h(10) : Siehe Deklaration von 'SDL_Button'
    e:\uni\code\pixgraph\sdl_dropdown.h(42) : warning C4259: 'void __thiscall SDL_Input::sendEvent(union SDL_Event *)' : Rein virtuelle Funktion wurde nicht definiert
    e:\uni\code\pixgraph\sdl_input.h(9) : Siehe Deklaration von 'sendEvent'
    e:\uni\code\pixgraph\sdl_dropdown.h(42) : warning C4259: 'void __thiscall SDL_Input::setState(int)' : Rein virtuelle Funktion wurde nicht definiert
    e:\uni\code\pixgraph\sdl_input.h(10) : Siehe Deklaration von 'setState'
    e:\uni\code\pixgraph\sdl_dropdown.h(42) : warning C4259: 'class Vektor __thiscall SDL_Input::getPos(void)' : Rein virtuelle Funktion wurde nicht definiert
    e:\uni\code\pixgraph\sdl_input.h(11) : Siehe Deklaration von 'getPos'
    e:\uni\code\pixgraph\sdl_dropdown.h(42) : warning C4259: 'class Vektor __thiscall SDL_Input::getSize(void)' : Rein virtuelle Funktion wurde nicht definiert
    e:\uni\code\pixgraph\sdl_input.h(12) : Siehe Deklaration von 'getSize'
    e:\uni\code\pixgraph\sdl_dropdown.h(42) : warning C4259: 'void __thiscall SDL_Input::setPos(int,int)' : Rein virtuelle Funktion wurde nicht definiert
    e:\uni\code\pixgraph\sdl_input.h(14) : Siehe Deklaration von 'setPos'
    e:\uni\code\pixgraph\sdl_dropdown.h(42) : warning C4259: 'void __thiscall SDL_Input::setPos(class Vektor)' : Rein virtuelle Funktion wurde nicht definiert
    e:\uni\code\pixgraph\sdl_input.h(13) : Siehe Deklaration von 'setPos'
    e:\uni\code\pixgraph\sdl_dropdown.h(42) : warning C4259: 'class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __thiscall SDL_Input::getLabel(void)' : Rein virtuelle Funktion wurde nicht definiert
    e:\uni\code\pixgraph\sdl_input.h(15) : Siehe Deklaration von 'getLabel'
    e:\uni\code\pixgraph\sdl_dropdown.h(42) : warning C4259: 'void __thiscall SDL_Input::setLabel(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)' : Rein virtuelle Funktion wurde nicht definiert
    e:\uni\code\pixgraph\sdl_input.h(16) : Siehe Deklaration von 'setLabel'
    e:\uni\code\pixgraph\sdl_dropdown.h(42) : warning C4259: 'void __thiscall SDL_Input::paint(struct SDL_Surface *)' : Rein virtuelle Funktion wurde nicht definiert
    e:\uni\code\pixgraph\sdl_input.h(17) : Siehe Deklaration von 'paint'
    e:\programme\visual studio components\vc98\include\list(29) : error C2259: "SDL_Button" : Instanz von abstrakter Klasse kann aufgrund nachfolgender Elemente nicht erstellt werden:
    e:\uni\code\pixgraph\sdl_button.h(10) : Siehe Deklaration von 'SDL_Button'
    e:\uni\code\pixgraph\sdl_dropdown.h(43) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'std::list<class SDL_Button,class std::allocator<class SDL_Button> >'
    e:\programme\visual studio components\vc98\include\list(29) : warning C4259: 'void __thiscall SDL_Input::sendEvent(union SDL_Event *)' : Rein virtuelle Funktion wurde nicht definiert
    e:\uni\code\pixgraph\sdl_input.h(9) : Siehe Deklaration von 'sendEvent'
    e:\uni\code\pixgraph\sdl_dropdown.h(43) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'std::list<class SDL_Button,class std::allocator<class SDL_Button> >'
    e:\programme\visual studio components\vc98\include\list(29) : warning C4259: 'void __thiscall SDL_Input::setState(int)' : Rein virtuelle Funktion wurde nicht definiert
    e:\uni\code\pixgraph\sdl_input.h(10) : Siehe Deklaration von 'setState'
    e:\uni\code\pixgraph\sdl_dropdown.h(43) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'std::list<class SDL_Button,class std::allocator<class SDL_Button> >'
    e:\programme\visual studio components\vc98\include\list(29) : warning C4259: 'class Vektor __thiscall SDL_Input::getPos(void)' : Rein virtuelle Funktion wurde nicht definiert
    e:\uni\code\pixgraph\sdl_input.h(11) : Siehe Deklaration von 'getPos'
    e:\uni\code\pixgraph\sdl_dropdown.h(43) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'std::list<class SDL_Button,class std::allocator<class SDL_Button> >'
    e:\programme\visual studio components\vc98\include\list(29) : warning C4259: 'class Vektor __thiscall SDL_Input::getSize(void)' : Rein virtuelle Funktion wurde nicht definiert
    e:\uni\code\pixgraph\sdl_input.h(12) : Siehe Deklaration von 'getSize'
    e:\uni\code\pixgraph\sdl_dropdown.h(43) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'std::list<class SDL_Button,class std::allocator<class SDL_Button> >'
    e:\programme\visual studio components\vc98\include\list(29) : warning C4259: 'void __thiscall SDL_Input::setPos(int,int)' : Rein virtuelle Funktion wurde nicht definiert
    e:\uni\code\pixgraph\sdl_input.h(14) : Siehe Deklaration von 'setPos'
    e:\uni\code\pixgraph\sdl_dropdown.h(43) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'std::list<class SDL_Button,class std::allocator<class SDL_Button> >'
    e:\programme\visual studio components\vc98\include\list(29) : warning C4259: 'void __thiscall SDL_Input::setPos(class Vektor)' : Rein virtuelle Funktion wurde nicht definiert
    e:\uni\code\pixgraph\sdl_input.h(13) : Siehe Deklaration von 'setPos'
    e:\uni\code\pixgraph\sdl_dropdown.h(43) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'std::list<class SDL_Button,class std::allocator<class SDL_Button> >'
    e:\programme\visual studio components\vc98\include\list(29) : warning C4259: 'class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __thiscall SDL_Input::getLabel(void)' : Rein virtuelle Funktion wurde nicht definie
    rt
    e:\uni\code\pixgraph\sdl_input.h(15) : Siehe Deklaration von 'getLabel'
    e:\uni\code\pixgraph\sdl_dropdown.h(43) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'std::list<class SDL_Button,class std::allocator<class SDL_Button> >'
    e:\programme\visual studio components\vc98\include\list(29) : warning C4259: 'void __thiscall SDL_Input::setLabel(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)' : Rein virtuelle Funktion wurde nicht definie
    rt
    e:\uni\code\pixgraph\sdl_input.h(16) : Siehe Deklaration von 'setLabel'
    e:\uni\code\pixgraph\sdl_dropdown.h(43) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'std::list<class SDL_Button,class std::allocator<class SDL_Button> >'
    e:\programme\visual studio components\vc98\include\list(29) : warning C4259: 'void __thiscall SDL_Input::paint(struct SDL_Surface *)' : Rein virtuelle Funktion wurde nicht definiert
    e:\uni\code\pixgraph\sdl_input.h(17) : Siehe Deklaration von 'paint'
    e:\uni\code\pixgraph\sdl_dropdown.h(43) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'std::list<class SDL_Button,class std::allocator<class SDL_Button> >'
    e:\programme\visual studio components\vc98\include\list(181) : error C2259: "SDL_Button" : Instanz von abstrakter Klasse kann aufgrund nachfolgender Elemente nicht erstellt werden:
    e:\uni\code\pixgraph\sdl_button.h(10) : Siehe Deklaration von 'SDL_Button'
    e:\uni\code\pixgraph\sdl_dropdown.h(43) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'std::list<class SDL_Button,class std::allocator<class SDL_Button> >'
    e:\programme\visual studio components\vc98\include\list(181) : warning C4259: 'void __thiscall SDL_Input::sendEvent(union SDL_Event *)' : Rein virtuelle Funktion wurde nicht definiert
    e:\uni\code\pixgraph\sdl_input.h(9) : Siehe Deklaration von 'sendEvent'
    e:\uni\code\pixgraph\sdl_dropdown.h(43) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'std::list<class SDL_Button,class std::allocator<class SDL_Button> >'
    e:\programme\visual studio components\vc98\include\list(181) : warning C4259: 'void __thiscall SDL_Input::setState(int)' : Rein virtuelle Funktion wurde nicht definiert
    e:\uni\code\pixgraph\sdl_input.h(10) : Siehe Deklaration von 'setState'
    e:\uni\code\pixgraph\sdl_dropdown.h(43) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'std::list<class SDL_Button,class std::allocator<class SDL_Button> >'
    e:\programme\visual studio components\vc98\include\list(181) : warning C4259: 'class Vektor __thiscall SDL_Input::getPos(void)' : Rein virtuelle Funktion wurde nicht definiert
    e:\uni\code\pixgraph\sdl_input.h(11) : Siehe Deklaration von 'getPos'
    e:\uni\code\pixgraph\sdl_dropdown.h(43) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'std::list<class SDL_Button,class std::allocator<class SDL_Button> >'
    e:\programme\visual studio components\vc98\include\list(181) : warning C4259: 'class Vektor __thiscall SDL_Input::getSize(void)' : Rein virtuelle Funktion wurde nicht definiert
    e:\uni\code\pixgraph\sdl_input.h(12) : Siehe Deklaration von 'getSize'
    e:\uni\code\pixgraph\sdl_dropdown.h(43) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'std::list<class SDL_Button,class std::allocator<class SDL_Button> >'
    e:\programme\visual studio components\vc98\include\list(181) : warning C4259: 'void __thiscall SDL_Input::setPos(int,int)' : Rein virtuelle Funktion wurde nicht definiert
    e:\uni\code\pixgraph\sdl_input.h(14) : Siehe Deklaration von 'setPos'
    e:\uni\code\pixgraph\sdl_dropdown.h(43) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'std::list<class SDL_Button,class std::allocator<class SDL_Button> >'
    e:\programme\visual studio components\vc98\include\list(181) : warning C4259: 'void __thiscall SDL_Input::setPos(class Vektor)' : Rein virtuelle Funktion wurde nicht definiert
    e:\uni\code\pixgraph\sdl_input.h(13) : Siehe Deklaration von 'setPos'
    e:\uni\code\pixgraph\sdl_dropdown.h(43) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'std::list<class SDL_Button,class std::allocator<class SDL_Button> >'
    e:\programme\visual studio components\vc98\include\list(181) : warning C4259: 'class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __thiscall SDL_Input::getLabel(void)' : Rein virtuelle Funktion wurde nicht defini
    ert
    e:\uni\code\pixgraph\sdl_input.h(15) : Siehe Deklaration von 'getLabel'
    e:\uni\code\pixgraph\sdl_dropdown.h(43) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'std::list<class SDL_Button,class std::allocator<class SDL_Button> >'
    e:\programme\visual studio components\vc98\include\list(181) : warning C4259: 'void __thiscall SDL_Input::setLabel(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)' : Rein virtuelle Funktion wurde nicht defini
    ert
    e:\uni\code\pixgraph\sdl_input.h(16) : Siehe Deklaration von 'setLabel'
    e:\uni\code\pixgraph\sdl_dropdown.h(43) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'std::list<class SDL_Button,class std::allocator<class SDL_Button> >'
    e:\programme\visual studio components\vc98\include\list(181) : warning C4259: 'void __thiscall SDL_Input::paint(struct SDL_Surface *)' : Rein virtuelle Funktion wurde nicht definiert
    e:\uni\code\pixgraph\sdl_input.h(17) : Siehe Deklaration von 'paint'
    e:\uni\code\pixgraph\sdl_dropdown.h(43) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'std::list<class SDL_Button,class std::allocator<class SDL_Button> >'
    e:\programme\visual studio components\vc98\include\functional(185) : error C2259: "SDL_Button" : Instanz von abstrakter Klasse kann aufgrund nachfolgender Elemente nicht erstellt werden:
    e:\uni\code\pixgraph\sdl_button.h(10) : Siehe Deklaration von 'SDL_Button'
    e:\programme\visual studio components\vc98\include\list(285) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'std::binder2nd<struct std::not_equal_to<class SDL_Button> >'
    e:\uni\code\pixgraph\sdl_dropdown.h(43) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'std::list<class SDL_Button,class std::allocator<class SDL_Button> >'
    e:\programme\visual studio components\vc98\include\functional(185) : warning C4259: 'void __thiscall SDL_Input::sendEvent(union SDL_Event *)' : Rein virtuelle Funktion wurde nicht definiert
    e:\uni\code\pixgraph\sdl_input.h(9) : Siehe Deklaration von 'sendEvent'
    e:\programme\visual studio components\vc98\include\list(285) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'std::binder2nd<struct std::not_equal_to<class SDL_Button> >'
    e:\uni\code\pixgraph\sdl_dropdown.h(43) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'std::list<class SDL_Button,class std::allocator<class SDL_Button> >'
    e:\programme\visual studio components\vc98\include\functional(185) : warning C4259: 'void __thiscall SDL_Input::setState(int)' : Rein virtuelle Funktion wurde nicht definiert
    e:\uni\code\pixgraph\sdl_input.h(10) : Siehe Deklaration von 'setState'
    e:\programme\visual studio components\vc98\include\list(285) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'std::binder2nd<struct std::not_equal_to<class SDL_Button> >'
    e:\uni\code\pixgraph\sdl_dropdown.h(43) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'std::list<class SDL_Button,class std::allocator<class SDL_Button> >'
    e:\programme\visual studio components\vc98\include\functional(185) : warning C4259: 'class Vektor __thiscall SDL_Input::getPos(void)' : Rein virtuelle Funktion wurde nicht definiert
    e:\uni\code\pixgraph\sdl_input.h(11) : Siehe Deklaration von 'getPos'
    e:\programme\visual studio components\vc98\include\list(285) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'std::binder2nd<struct std::not_equal_to<class SDL_Button> >'
    e:\uni\code\pixgraph\sdl_dropdown.h(43) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'std::list<class SDL_Button,class std::allocator<class SDL_Button> >'
    e:\programme\visual studio components\vc98\include\functional(185) : warning C4259: 'class Vektor __thiscall SDL_Input::getSize(void)' : Rein virtuelle Funktion wurde nicht definiert
    e:\uni\code\pixgraph\sdl_input.h(12) : Siehe Deklaration von 'getSize'
    e:\programme\visual studio components\vc98\include\list(285) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'std::binder2nd<struct std::not_equal_to<class SDL_Button> >'
    e:\uni\code\pixgraph\sdl_dropdown.h(43) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'std::list<class SDL_Button,class std::allocator<class SDL_Button> >'
    e:\programme\visual studio components\vc98\include\functional(185) : warning C4259: 'void __thiscall SDL_Input::setPos(int,int)' : Rein virtuelle Funktion wurde nicht definiert
    e:\uni\code\pixgraph\sdl_input.h(14) : Siehe Deklaration von 'setPos'
    e:\programme\visual studio components\vc98\include\list(285) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'std::binder2nd<struct std::not_equal_to<class SDL_Button> >'
    e:\uni\code\pixgraph\sdl_dropdown.h(43) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'std::list<class SDL_Button,class std::allocator<class SDL_Button> >'
    e:\programme\visual studio components\vc98\include\functional(185) : warning C4259: 'void __thiscall SDL_Input::setPos(class Vektor)' : Rein virtuelle Funktion wurde nicht definiert
    e:\uni\code\pixgraph\sdl_input.h(13) : Siehe Deklaration von 'setPos'
    e:\programme\visual studio components\vc98\include\list(285) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'std::binder2nd<struct std::not_equal_to<class SDL_Button> >'
    e:\uni\code\pixgraph\sdl_dropdown.h(43) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'std::list<class SDL_Button,class std::allocator<class SDL_Button> >'
    e:\programme\visual studio components\vc98\include\functional(185) : warning C4259: 'class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __thiscall SDL_Input::getLabel(void)' : Rein virtuelle Funktion wurde nicht
    definiert
    e:\uni\code\pixgraph\sdl_input.h(15) : Siehe Deklaration von 'getLabel'
    e:\programme\visual studio components\vc98\include\list(285) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'std::binder2nd<struct std::not_equal_to<class SDL_Button> >'
    e:\uni\code\pixgraph\sdl_dropdown.h(43) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'std::list<class SDL_Button,class std::allocator<class SDL_Button> >'
    e:\programme\visual studio components\vc98\include\functional(185) : warning C4259: 'void __thiscall SDL_Input::setLabel(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)' : Rein virtuelle Funktion wurde nicht
    definiert
    e:\uni\code\pixgraph\sdl_input.h(16) : Siehe Deklaration von 'setLabel'
    e:\programme\visual studio components\vc98\include\list(285) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'std::binder2nd<struct std::not_equal_to<class SDL_Button> >'
    e:\uni\code\pixgraph\sdl_dropdown.h(43) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'std::list<class SDL_Button,class std::allocator<class SDL_Button> >'
    e:\programme\visual studio components\vc98\include\functional(185) : warning C4259: 'void __thiscall SDL_Input::paint(struct SDL_Surface *)' : Rein virtuelle Funktion wurde nicht definiert
    e:\uni\code\pixgraph\sdl_input.h(17) : Siehe Deklaration von 'paint'
    e:\programme\visual studio components\vc98\include\list(285) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'std::binder2nd<struct std::not_equal_to<class SDL_Button> >'
    e:\uni\code\pixgraph\sdl_dropdown.h(43) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'std::list<class SDL_Button,class std::allocator<class SDL_Button> >'
    E:\Uni\code\PixGraph\SDL_Dropdown.cpp(8) : error C2259: "SDL_Button" : Instanz von abstrakter Klasse kann aufgrund nachfolgender Elemente nicht erstellt werden:
    e:\uni\code\pixgraph\sdl_button.h(10) : Siehe Deklaration von 'SDL_Button'
    E:\Uni\code\PixGraph\SDL_Dropdown.cpp(8) : warning C4259: 'void __thiscall SDL_Input::sendEvent(union SDL_Event *)' : Rein virtuelle Funktion wurde nicht definiert
    e:\uni\code\pixgraph\sdl_input.h(9) : Siehe Deklaration von 'sendEvent'
    E:\Uni\code\PixGraph\SDL_Dropdown.cpp(8) : warning C4259: 'void __thiscall SDL_Input::setState(int)' : Rein virtuelle Funktion wurde nicht definiert
    e:\uni\code\pixgraph\sdl_input.h(10) : Siehe Deklaration von 'setState'
    E:\Uni\code\PixGraph\SDL_Dropdown.cpp(8) : warning C4259: 'class Vektor __thiscall SDL_Input::getPos(void)' : Rein virtuelle Funktion wurde nicht definiert
    e:\uni\code\pixgraph\sdl_input.h(11) : Siehe Deklaration von 'getPos'
    E:\Uni\code\PixGraph\SDL_Dropdown.cpp(8) : warning C4259: 'class Vektor __thiscall SDL_Input::getSize(void)' : Rein virtuelle Funktion wurde nicht definiert
    e:\uni\code\pixgraph\sdl_input.h(12) : Siehe Deklaration von 'getSize'
    E:\Uni\code\PixGraph\SDL_Dropdown.cpp(8) : warning C4259: 'void __thiscall SDL_Input::setPos(int,int)' : Rein virtuelle Funktion wurde nicht definiert
    e:\uni\code\pixgraph\sdl_input.h(14) : Siehe Deklaration von 'setPos'
    E:\Uni\code\PixGraph\SDL_Dropdown.cpp(8) : warning C4259: 'void __thiscall SDL_Input::setPos(class Vektor)' : Rein virtuelle Funktion wurde nicht definiert
    e:\uni\code\pixgraph\sdl_input.h(13) : Siehe Deklaration von 'setPos'
    E:\Uni\code\PixGraph\SDL_Dropdown.cpp(8) : warning C4259: 'class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __thiscall SDL_Input::getLabel(void)' : Rein virtuelle Funktion wurde nicht definiert
    e:\uni\code\pixgraph\sdl_input.h(15) : Siehe Deklaration von 'getLabel'
    E:\Uni\code\PixGraph\SDL_Dropdown.cpp(8) : warning C4259: 'void __thiscall SDL_Input::setLabel(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)' : Rein virtuelle Funktion wurde nicht definiert
    e:\uni\code\pixgraph\sdl_input.h(16) : Siehe Deklaration von 'setLabel'
    E:\Uni\code\PixGraph\SDL_Dropdown.cpp(8) : warning C4259: 'void __thiscall SDL_Input::paint(struct SDL_Surface *)' : Rein virtuelle Funktion wurde nicht definiert
    e:\uni\code\pixgraph\sdl_input.h(17) : Siehe Deklaration von 'paint'
    E:\Uni\code\PixGraph\SDL_Dropdown.cpp(15) : error C2259: "SDL_Button" : Instanz von abstrakter Klasse kann aufgrund nachfolgender Elemente nicht erstellt werden:
    e:\uni\code\pixgraph\sdl_button.h(10) : Siehe Deklaration von 'SDL_Button'
    E:\Uni\code\PixGraph\SDL_Dropdown.cpp(15) : warning C4259: 'void __thiscall SDL_Input::sendEvent(union SDL_Event *)' : Rein virtuelle Funktion wurde nicht definiert
    e:\uni\code\pixgraph\sdl_input.h(9) : Siehe Deklaration von 'sendEvent'
    E:\Uni\code\PixGraph\SDL_Dropdown.cpp(15) : warning C4259: 'void __thiscall SDL_Input::setState(int)' : Rein virtuelle Funktion wurde nicht definiert
    e:\uni\code\pixgraph\sdl_input.h(10) : Siehe Deklaration von 'setState'
    E:\Uni\code\PixGraph\SDL_Dropdown.cpp(15) : warning C4259: 'class Vektor __thiscall SDL_Input::getPos(void)' : Rein virtuelle Funktion wurde nicht definiert
    e:\uni\code\pixgraph\sdl_input.h(11) : Siehe Deklaration von 'getPos'
    E:\Uni\code\PixGraph\SDL_Dropdown.cpp(15) : warning C4259: 'class Vektor __thiscall SDL_Input::getSize(void)' : Rein virtuelle Funktion wurde nicht definiert
    e:\uni\code\pixgraph\sdl_input.h(12) : Siehe Deklaration von 'getSize'
    E:\Uni\code\PixGraph\SDL_Dropdown.cpp(15) : warning C4259: 'void __thiscall SDL_Input::setPos(int,int)' : Rein virtuelle Funktion wurde nicht definiert
    e:\uni\code\pixgraph\sdl_input.h(14) : Siehe Deklaration von 'setPos'
    E:\Uni\code\PixGraph\SDL_Dropdown.cpp(15) : warning C4259: 'void __thiscall SDL_Input::setPos(class Vektor)' : Rein virtuelle Funktion wurde nicht definiert
    e:\uni\code\pixgraph\sdl_input.h(13) : Siehe Deklaration von 'setPos'
    E:\Uni\code\PixGraph\SDL_Dropdown.cpp(15) : warning C4259: 'class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __thiscall SDL_Input::getLabel(void)' : Rein virtuelle Funktion wurde nicht definiert
    e:\uni\code\pixgraph\sdl_input.h(15) : Siehe Deklaration von 'getLabel'
    E:\Uni\code\PixGraph\SDL_Dropdown.cpp(15) : warning C4259: 'void __thiscall SDL_Input::setLabel(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)' : Rein virtuelle Funktion wurde nicht definiert
    e:\uni\code\pixgraph\sdl_input.h(16) : Siehe Deklaration von 'setLabel'
    E:\Uni\code\PixGraph\SDL_Dropdown.cpp(15) : warning C4259: 'void __thiscall SDL_Input::paint(struct SDL_Surface *)' : Rein virtuelle Funktion wurde nicht definiert
    e:\uni\code\pixgraph\sdl_input.h(17) : Siehe Deklaration von 'paint'
    E:\Uni\code\PixGraph\SDL_Dropdown.cpp(40) : error C2509: 'sendEvent' : Member-Funktion nicht in 'SDL_Button' deklariert
    e:\uni\code\pixgraph\sdl_button.h(10) : Siehe Deklaration von 'SDL_Button'
    E:\Uni\code\PixGraph\SDL_Dropdown.cpp(61) : error C2819: Der Typ 'SDL_Button' hat keinen ueberladenen Elementoperator '->'
    e:\uni\code\pixgraph\sdl_button.h(10) : Siehe Deklaration von 'SDL_Button'
    E:\Uni\code\PixGraph\SDL_Dropdown.cpp(61) : error C2227: Der linke Teil von '->active' muss auf Klasse/Struktur/Union zeigen
    E:\Uni\code\PixGraph\SDL_Dropdown.cpp(63) : error C2440: 'type cast' : 'class SDL_Button' kann nicht in 'class SDL_Button *' konvertiert werden
    Kein benutzerdefinierter Konvertierungsoperator verfuegbar, der diese Konvertierung durchfuehren kann, oder der Operator kann nicht aufgerufen werden
    E:\Uni\code\PixGraph\SDL_Dropdown.cpp(63) : error C2227: Der linke Teil von '->setHoverState' muss auf Klasse/Struktur/Union zeigen
    E:\Uni\code\PixGraph\SDL_Dropdown.cpp(68) : error C2440: 'initializing' : 'class std::list<class SDL_Button,class std::allocator<class SDL_Button> >::iterator' kann nicht in 'class std::list<class SDL_Input *,class std::allocator<class SDL_Input *>

    ::iterator' konvertiert werden
    Quelltyp konnte von keinem Konstruktor angenommen werden, oder die Ueberladungsaufloesung des Konstruktors ist mehrdeutig
    E:\Uni\code\PixGraph\SDL_Dropdown.cpp(68) : error C2678: Binaerer Operator '!=' : Kein Operator definiert, der einen linksseitigen Operator vom Typ 'class std::list<class SDL_Input *,class std::allocator<class SDL_Input *> >::iterator' akzeptiert (o
    der keine geeignete Konvertierung moeglich)
    E:\Uni\code\PixGraph\SDL_Dropdown.cpp(70) : error C2039: 'setHoverState' : Ist kein Element von 'SDL_Input'
    e:\uni\code\pixgraph\sdl_input.h(5) : Siehe Deklaration von 'SDL_Input'
    Fehler beim Ausführen von cl.exe.

    PixGraph.exe - 27 Fehler, 90 Warnung(en)

    #ifndef SDL_Dropdown_h
    #define SDL_Dropdown_h 1
    #include "SDL_Button.h"
    #include <list>
    
    class SDL_Dropdown : public SDL_Input
    {
    	//
    public:
    	typedef void ( *action )(SDL_Event *e);
    	SDL_Dropdown(SDL_SurfaceWrapper sNormal, SDL_SurfaceWrapper sHover, SDL_SurfaceWrapper sPressed,
    		std::string label, TTF_Font *font, SDL_Color fColor, Vektor textAlign,
    		action onPress, Vektor pos);
    
    	int addButton(SDL_SurfaceWrapper sNormal, SDL_SurfaceWrapper sHover, SDL_SurfaceWrapper sPressed,
    		std::string label, TTF_Font *font, SDL_Color fColor, Vektor textAlign,
    		action onPress);
    
    	SDL_Button* getMainButton();
    	SDL_Button* getButton(int index);
    
    	void dropDown();
    	void close();
    
    	void sendEvent(SDL_Event *event);
    	void setState(int s);
    	Vektor getPos();
    	Vektor getSize();
    	void setPos(Vektor v);
    	void setPos(int x, int y);
    	std::string getLabel();
    	void setLabel(std::string nLabel);
    	virtual ~SDL_Dropdown();
    	bool active;
    	int setHoverState(Vektor mousePos);
    	int setPressedState(Vektor mousePos);
    	int setClickedState(Vektor mousePos);
    	void paint(SDL_Surface *to);
    private:
    
    	bool opened;
    	SDL_Button ddMain;
    	std::list<SDL_Button> ddButtons;
    };
    #endif
    


  • Ist es eigentlich Absicht, daß die Methoden der SDL_Button alle auskommentiert sind? (btw, dieser Quelltext passt absolut nicht zu den Fehlermeldungen)



  • übe am besten noch mal ein wenig mit den abstrakten klassen, hier ist das erstbeste tutorial, das ich dazu gefunden haben, und verwender erst dann eine abstrakte klasse in einem größerem Projekt, wenn du dir halbwegs sicher bist.

    http://tutorial.schornboeck.net/pure_virtual.htmhttp://tutorial.schornboeck.net/pure_virtual.htm



  • kann vielleicht jmd was zum problem sagen? müssen methoden, die in der vererbenden klasse definiert sind auch in der erbenden klasse definiert oder nur implementiert werden ?

    CStoll schrieb:

    Ist es eigentlich Absicht, daß die Methoden der SDL_Button alle auskommentiert sind? (btw, dieser Quelltext passt absolut nicht zu den Fehlermeldungen)

    äh? welchen quelltext willst du haben ?

    ich hab die auskommentiert, da sie ja schon in Input definiert sind? wieso sollte man sie dann in einer von input erbenden klasse nochmal definieren ?

    edit: nach den "tutorials" müsste das, was ich hier versuche funktionieren



  • 2. kann vielleicht jmd was zum problem sagen? müssen methoden, die in der vererbenden klasse definiert sind auch in der erbenden klasse definiert oder nur implementiert werden ?

    beides, und das ist wichtig. und ich nehm mal an, da du diese frage stellst, ist genau das das problem 😉

    class A
    {
      virtual void foo() = 0;
    };
    
    class B : public A
    {
    };
    
    int main() {
      B b;
    }
    
    // ...
    
    void B::foo() {
      // irgendwas
    }
    

    das geht durch den compiler, weil B::foo() einfach eine ungebundene methode ist. aber der linker jammert, weil ihm die implementierung von B::foo fehlt (keine deklaration)



  • pixartist schrieb:

    ich hab die auskommentiert, da sie ja schon in Input definiert sind? wieso sollte man sie dann in einer von input erbenden klasse nochmal definieren ?

    Weil man es muss. In Java bemerkst du es nicht, weil du Deklaration und Definition nicht trennst. Grundsätzlich muss alles im Header deklariert werden, was du im Source definierst (okay, gibt Ausnahmen wie das Body-Handle-Idiom [auch pImpl genannt] wo ein Teil der Deklaration erst im Source erfolgt - wer nicht weiß was es ist darf googlen wenn es ihn interessiert).

    Grundsätzlich wird erst der Header beim Compilieren betrachtet, erst danach der Source.

    cu André



  • ~thordk schrieb:

    2. kann vielleicht jmd was zum problem sagen? müssen methoden, die in der vererbenden klasse definiert sind auch in der erbenden klasse definiert oder nur implementiert werden ?

    beides, und das ist wichtig. und ich nehm mal an, da du diese frage stellst, ist genau das das problem 😉

    class A
    {
      virtual void foo() = 0;
    };
    
    class B : public A
    {
    };
    
    int main() {
      B b;
    }
    
    // ...
    
    void B::foo() {
      // irgendwas
    }
    

    das geht durch den compiler, weil B::foo() einfach eine ungebundene methode ist. aber der linker jammert, weil ihm die implementierung von B::foo fehlt (keine deklaration)

    also wäre richtig:

    class A
    {
      virtual void foo() = 0;
    };
    
    class B : public A
    {
      void foo();
    };
    
    int main() {
      B b;
    }
    
    // ...
    
    void B::foo() {
      // irgendwas
    }
    


  • Achso weiterer Nachtrag weil ich es hier sehe:

    Etwas das du dir auch versuchen solltest in C++ anzugewöhnen, sind Referenzen bei der übergabe. An vielen Stellen kopierst du beim Aufruf Daten unnötig. Und hierzu noch etwas weiteres: Man sollte möglichst wenig Abhängigkeiten im Header schaffen, und diese lieber in den Source verschieben (Reduziert u.a. Linkzeiten).

    Beispiel:

    ...
    class SDL_Input
    {
    public:
        ...
        virtual void setPos(Vektor v) = 0;
        ...
    };
    #endif
    

    Hier gibt es schon mehrere Dinge die ich anmerken will:
    a) Ich habe in deinen Code keine Deklaration von Vektor gefunden, wo inkludierst du den? Die Klasse muß wie du sie hier verwendest jedenfalls im Header bekannt sein.

    b) Mit dem Aufruf von setPos erzeugst du eine Kopie, was sicherlich nicht der Performance zuträglich ist. Um dies zu umgehen sollte man auf Zeiger (wenn es auch null sein darf) oder Referenzen (wenn es nicht null sein darf) ausweichen. Es sei den es ist an der Stelle explizit gewollt das man Kopiert (wobei ich das dann erst im Source machen würde. Wenn ich mich noch richtig erinnere wird in Java hier eine Referenz (bzw. eigentlich ein Zeiger der aber Syntaktisch an eine Referenz erinnert, verwendet).

    Bei C++ musst du Referenzen immer explizit angeben. Wo ist nun der Vorteil von Referenzen / Zeigern zu deiner Übergabe:
    a) Keine Kopie nötig
    b) Eine Einfache Vorwärtsdeklaration im Header (und inklude im Source) reicht, was sich z.B. auf die Compilezeit auswirkt
    c) Man kann mittels const sehr schon angeben was nun manipuliert werden kann und was nicht.

    Beispiel:

    Beispiel:

    ...
    
    class Vektor; // Vorwärtsdeklaration
    class SDL_Input
    {
    public:
        ...
        virtual void setPos(Vektor& v) = 0; // Variante 1
        virtual void setPos(Vektor& const v) = 0; // Variante 2a
        virtual void setPos(const Vektor& v) = 0; // Variante 2b
        virtual void setPos(Vektor const * v) = 0; // Variante 3a
        virtual void setPos(const Vektor* v) = 0; // Variante 3b
        virtual void setPos(Vektor* const v) = 0; // Variante 4
        virtual void setPos(const Vektor* const v) = 0; // Variante 5a
        virtual void setPos(Vektor const * const v) = 0; // Variante 5b
        ...
    };
    #endif
    

    Varianten:
    1. Referenz die geändert werden kann
    2a/2b. Konstante Referenz, keine Änderung möglich
    3a/3b. Nicht-Konstanter Zeiger auf konstantes Objekt
    4. Konstanter Zeiger auf nicht konstantes Objekt
    5a/5b. Konstanter Zeiger auf konstantes Objekt

    Ich hoffe jetzt alles richtig wiedergegeben bei 2a bin ich mir grad nicht 100% sicher (Ich verwende eigentlich bei konstanten Referenzen nur 2b). Bei Zeigern halte ich mich an folgende Regel die es erleichtert:

    Schreibe immer const hinter den Teil der Konstant sein soll
    ...methode(typ [const] * [const] name)...

    cu André



  • hm ok, aber wenn ich ein objekt lokal erzeuge, dann einen pointer an ein klassenobjekt übergebe, und das objekt dannach eigentlich gelöscht werden würde(lokal erstellt!), zeigt der pointer dann nicht ins leere ? (der pointer, der im klassenobjekt gespeichert wurde)



  • pixartist schrieb:

    hm ok, aber wenn ich ein objekt lokal erzeuge, dann einen pointer an ein klassenobjekt übergebe, und das objekt dannach eigentlich gelöscht werden würde(lokal erstellt!), zeigt der pointer dann nicht ins leere ? (der pointer, der im klassenobjekt gespeichert wurde)

    Ja, der Zeigt dann ins Leere. Aber Pointer würde ich eh nur verwenden wenn eine null-Übergabe zulässig sein soll (ansonsten ist die Referenzübergabe immer orzuziehen) - Kopieren kannst du den Wert auch in der aufgerufenen Methode noch. Bei der Pointerübergabe ist immer auf die Objektherrschaft zu achten (in der Regel benutzt man Pointer mit new/delete zusammen).

    Eine Alternative zum klassischen Pointer sind intelligente Smartpointer (z.b. boost::shared_ptr), siehe auch http://www.boost.org/libs/smart_ptr/smart_ptr.htm ).

    cu André



  • Zu den Referenz-Varianten: 2a ist Käse, das wäre eine konstante Referenz auf ein veränderbares Objekt (analog zu Variante 4) - aber da Referenzen sowieso konstant sind, ist so eine Angabe sinnlos. Richtig wäre Vektor const& v - und das ist wirklich äquivalent zu 2b.
    (du kannst dir merken: alles vor dem &/* bezieht sich auf das Ziel, alles danach auf die Referenz/Zeiger selber)



  • CStoll schrieb:

    Zu den Referenz-Varianten: 2a ist Käse, das wäre eine konstante Referenz auf ein veränderbares Objekt (analog zu Variante 4) - aber da Referenzen sowieso konstant sind, ist so eine Angabe sinnlos. Richtig wäre Vektor const& v - und das ist wirklich äquivalent zu 2b.
    (du kannst dir merken: alles vor dem &/* bezieht sich auf das Ziel, alles danach auf die Referenz/Zeiger selber)

    ok, sry das ich so dumm frage, aber ich bin grad etwas verwirrt!?

    void methode(klasse *test)

    hier bekommt die methode eine variable, die eine adresse enthält, wobei an dieser adresse ein objekt vom typ klasse liegt.

    void methode (klasse &test) (bzw const& test)
    was enthält test jetzt?



  • pixartist schrieb:

    void methode (klasse &test) (bzw const& test)
    was enthält test jetzt?

    Ist doch ganz einfach: Eine Referenz (Alias-Name) auf ein 'klasse'-Objekt.

    (wenn du es primitv betrachten willst, ist eine Referenz etwas ähnliches wie ein konstanter Zeiger, der sich bei der Verwendung automatisch dereferenziert - und häufig wird der Compiler sie auch genau so umsetzen)



  • CStoll schrieb:

    pixartist schrieb:

    void methode (klasse &test) (bzw const& test)
    was enthält test jetzt?

    Ist doch ganz einfach: Eine Referenz (Alias-Name) auf ein 'klasse'-Objekt.

    (wenn du es primitv betrachten willst, ist eine Referenz etwas ähnliches wie ein konstanter Zeiger, der sich bei der Verwendung automatisch dereferenziert - und häufig wird der Compiler sie auch genau so umsetzen)

    und was passiert jetzt wenn ich das übergebene objekt lokal erstellt hab ?



  • Du meinst so?

    void function(int& test)
    {
      test+=10;
    }
    
    void test_function()
    {
      int i=5;
      function(i);
    }
    

    Aus Sicht von function() ist es egal, wo das übergebene Objekt liegt - die Referenz ist bei diesem Aufruf ein anderer Name von test_function()::i, also wird der Aufruf auch dessen Wert verändern.


Anmelden zum Antworten