Pointer einer Subklasse kann nicht in Pointer der Baseklasse konvertiert werden:
-
Hallöchen,
Ich hab vereinfacht folgende Situation:
class PlayableObject{ // bla bla }; class Ghost : public PlayableObject{ // bla bla }; class Agent{ public: Agent(PlayableObject* obj) :m_plObj(obj){ } protected: PlayableObject* m_plObj; }; class GhostAgent : public Agent{ GhostAgent(Ghost* ghost) :Agent(ghost){ } };Der Compiler sagt mir:
error C2664: 'Agent::Agent(PlayableObject *const )': Konvertierung des Parameters 1 von 'Ghost *' in 'PlayableObject *' nicht möglichAber Ghost ist doch eine Subklasse von PlayableObject, warum kann dann ein PlayableObject-Pointer nicht auf einen Ghost zeigen bzw. mit einem Ghost-Pointer initialisiert werden??
ich dachte mir, dass es vielleicht Typenprobleme mit den Pointern gibt, und hab mal das probiert:
hostAgent(Ghost* ghost) :Agent(&(*ghost)){ }funktioniert aber auch nicht.
wo ist also das Problem???Vielen Dank für eure Hilfe!!!
Grüße,
anchelito
-
Kompiiert einwandfrei durch (einfach durch copy and paste und dann kompiliert), Fehler steckt nicht in deinem Code.
EDIT: Jedenfalls nicht in dem von dir geposteten Stück
Felix
-
hmm ... ich hab jetzt einfach mal das ganze Projekt neu erstellt. jetzt funktionierts auch bei mir. Echt strange.
Vielen Dank!!! Hast mir sehr geholfen!
anchelito
-
Konvertierung des Parameters 1 von 'Ghost *' in 'PlayableObject *' nicht möglich
In der Initialisierungsliste der "Agent"-Klasse wird nichts konvertiert.
warum kann dann ein PlayableObject-Pointer nicht auf einen Ghost zeigen bzw. mit einem Ghost-Pointer initialisiert werden
Funktioniert und nennt sich Polymorphie.
(&(*ghost))
