ref struct als Rückgabewert?
-
Hallo, so langsam bin ich wiedermal am verzweifeln:
ref class Ship{ public: ref struct st_akt_max{ int akt, max; double prozent; }; private: st_akt_max hp; public: Ship(void); void set_hp(int akt, int max); void set_hp(int akt); st_akt_max get_hp(void); }
So sieht meine Header Datei aus...
So schön und gut... aber mit der get_hp Funktion hab ich noch so meine Probleme...Meine Quelltext-Datei dazu sieht wie folg aus:
Ship::Ship(void){ } // SET/GET # HP void Ship::set_hp(int akt, int max){ hp.akt = akt; hp.max = max; if(hp.max > 0){ hp.prozent = hp.akt/hp.max*100; } } void Ship::set_hp(int akt){ hp.akt = akt; if((int)hp.max > 0){ hp.prozent = hp.akt/hp.max*100; } } Ship::st_akt_max Ship::get_hp(void){ return hp; }
Und jetzt bekomme ich folgenden Fehler:
error C2440: 'return': 'Ship::st_akt_max' kann nicht in 'Ship::st_akt_max' konvertiert werden.
... Ich habe schon versucht, meine ref struct st_akt_max außerhalb der Ship Klasse zu definieren (in dem Zuge hab ich dann das Ship:: vor st_akt_max in der Quelltextdatei weggelassen: Gleicher Fehler....)
Ich hoffe ihr wisst Rat
Denn ich wälze nun schon 1 Tag lang meine Bücher und Google und finde einfach nicht den Fehler...
-
Du könntest
value struct
bzw.
value class
verwenden. Oder aber deine Klasse so abändern:
ref class Ship{ public: ref struct st_akt_max{ int akt, max; double prozent; }; private: st_akt_max^ hp; public: Ship(void); void set_hp(int akt, int max); void set_hp(int akt); st_akt_max^ get_hp(void); };
Ship::Ship(void){ hp = gcnew st_akt_max(); } // SET/GET # HP void Ship::set_hp(int akt, int max){ hp.akt = akt; hp.max = max; if(hp.max > 0){ hp.prozent = hp.akt/hp.max*100; } } void Ship::set_hp(int akt){ hp.akt = akt; if((int)hp.max > 0){ hp.prozent = hp.akt/hp.max*100; } } Ship::st_akt_max^ Ship::get_hp(void){ return hp; }
Beachte das ^!
Werde Dir über Reference vs Value Semantik in C++/CLI klar.Edit:
BTW: C++/CLI ist selten eine gute Wahl für Applikationen. Nimm entweder C# oder C++. Dazu noch den folgenden Thread: http://www.c-plusplus.net/forum/263084
-
Danke
und ich bin auch schon am lesen, wieso das mit value struct so wunderbar klappt
zu dem BTW: Ich entwickle eine CLR Konsolen anwendung... Ich benutze dort viele Sachen von System:: (IO, Sockets (TcpClient), Threading)
Ich habe schon erfolglos versucht, das ganze in einer Win32 Anwendung zu verpacken...(Ehrlich gesagt gefällt mir C++/CLI gar nicht... Aber ich hab keine Ahnung, wie ich das sonst umsetzen soll...)