Vererbung und konstruktoren ??
-
Hallo
ich habe hier ein keine Problem, wobei ich Hilfe gebrauchen könnte ^^
als ich habe eine Basisklasse, die Koordinaten enthält (X,Y) und die so ausschaut:class Koordinaten { public: Koordinaten(unsigned char _posX, unsigned char _posY) :posX(_posX) ,posY(_posY) {} unsigned char getPosX() const {return posX;} unsigned char getPosY() const {return posY;} protected: unsigned char posX, posY; };
nun will ich von dieser klass erben und habe es so gemacht:
class Spieler : Koordinaten { public: Spieler(unsigned char _posX, unsigned char _posY) :posX(_posX) ,posY(_posY) {} Spieler(){} ... };
der kompiler "schmeist" mir aber eine Fehlermeldung an den Kopf: "class `Spieler' does not have any field named `posX' " -> und das kann ich nicht verstehen -> ich erbe doch von meiner Koordinaten Klasse
Wie muss ich das anstellen?
MFg
-
Der Spieler-Ctor darf nur die eigenen Member der Klasse direkt initialisieren - und die Initialisierung der Basis-Member an den Basis-Ctor weiterleiten:
class Spieler : public/*??*/ Koordinaten { public: Spieler(unsigned char _posX, unsigned char _posY) : Koordinaten(_posX,_posY) {} };
-
Ahh vielen Dank, ich wusste doch das man das irgendwie so machen musste -> wusste aber eben nicht mehrgenau wie das ging ^^
-
Rainu schrieb:
nun will ich von dieser klass erben und habe es so gemacht:
class Spieler : Koordinaten
Es ist von Design-Standpunkt her vermutlich Quatsch, das überhaupt zu tun. (Öffentliche) Vererbung drückt eine "ist ein"-Beziehung aus. In deinem Design ist also ein Spieler ein Koordinatenpaar. So etwas sollte man besser durch eine "hat ein"-Beziehung ausdrücken (also der Spieler-Klasse einen Koordinaten-Member verpassen).
-
class coord { unsigned char m_x; unsigned char m_y; public: coord(unsigned char x, unsigned char y) : m_x(x), m_y(y) {} public: unsigned char get_x() const { return m_x; } unsigned char get_y() const { return m_y; } }; class player { coord m_pos; std::string m_name; public: player(std::string const& name, coord const& pos) : m_name(name), m_pos(pos) {} };
wäre logischer ...