*/& 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