*/& Konvertierungs fehler



  • Hallo zusammen. Ich habe ein Problem bei dem ich nicht so wirklich ohne hilfe weiterkomme. Und zwar versuche ich (zum ersten mal) Objektorientiert ein Programm zu schreiben (Hamster läuft durch Labyrinth KI). Das ganze würde auch wunderbar funktionieren wenn da nicht ein kleines Problem wäre.

    TGUI soll das Spielfeld und den "Hamster" erschaffen. Das Spielfeld wird auch wunderbar erzeugt, aber der Hamster hat in seinem Konstruktor einen Fehler den ich mit meinen Kenntnissen nicht beheben kann.

    Die Fehlermeldung

    VisualC++Debbuger: Konvertierung des Parameters 3 von 'TSpielfeld *' in 'TSpielfeld &' nicht möglich

    sagt mir das * nicht in & konvertiert werden (z.32) In dem Zusammenhang kommt aber garkein Zeiger vor.

    //THamster stellt die KI dar die durch das Labyrinth laufen soll
    class THamster
    {
        private:
    	int X;
    	int Y;
    	TSpielfeld *Spielfeld;
    public:
    	THamster(int x,int y,TSpielfeld &field);
    };
    
    THamster::THamster(int x, int y,TSpielfeld &field)
    {
      //Konstruktor der von zeile 32 aufgerufen wird
    	X = x;
    	Y = y;
    	Spielfeld = &field;
    }
    
    //TGUI verknüpft die objekte THamster und TSpielfeld und macht daraus ein Textbasiertegrafisches Labyrinth
    class TGUI
    {
    private:
    	THamster *Hamster;
    	TSpielfeld *spielfeld;
    };
    
    TGUI::TGUI()
    {
    	TSpielfeld Feld(20,20);
    	spielfeld = &Feld;
        THamster Hamsta(1,1,&Feld); //Hier Meldet der Debugger einen fehler
        Hamster = &Hamsta;
    }
    

    Wenn ich mich nicht irre habe ich alle relevanten zeilen reingeschrieben.
    Ich hoffe ihr versteht mein problem irgendwie und könnt mir helfen. Dankeschön 🙂



  • Du übergibst die Adresse (&-Operator), die Funktion erwartet aber eine Referenz (auch &-Operator). Das ist ein bisschen unglücklich wegen der Mehrdeutigkeit, merke dir einfach, dass du beim Aufruf nur & schreibst, wenn in der Funktion ein Parameter als Zeiger erwartet wird (mit einem *). Bei Referenzen kannst du das Zeichen einfach weglassen (beim Aufruf, in der Parameterliste muss es stehen).

    Liech schrieb:

    //THamster stellt die KI dar die durch das Labyrinth laufen soll
    class THamster
    {
    public:
    	THamster(int x,int y,TSpielfeld &field); // Es wird eine Referenz erwartet
    };
    
    TGUI::TGUI()
    {
        THamster Hamsta(1,1,&Feld); // Hier wird die Adresse (für einen Zeiger) übergeben
        THamster Hamsta(1,1,Feld);  // So wäre es richtig
    }
    


  • Dankeschön, damit funktioniert es 🙂


Log in to reply