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öglich

    Aber 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))

    😃


Anmelden zum Antworten