Objekt mit Konstruktor in anderer Klasse
-
Warum funktioniert das nicht?
Entities
class Player : public Entities { Inventory inventory(2); };Inventory
class Inventory { public: Inventory(short); }; Inventory::Inventory(short slots) { slot = new Items*[slots]; ptrEmptySlot = new EmptySlot; for(unsigned short c = 0; c <= slots; c++) { slot[c] = ptrEmptySlot; } }Temporäre Dateien und Ausgabedateien für "RPGEngine - Win32 Debug" werden gelöscht. --------------------Konfiguration: RPGEngine - Win32 Debug-------------------- Kompilierung läuft... Engine.cpp d:\c++\vc6\übungen\rpgengine\entities.h(32) : error C2059: Syntaxfehler : 'constant' Entities.cpp d:\c++\vc6\übungen\rpgengine\entities.h(32) : error C2059: Syntaxfehler : 'constant' d:\c++\vc6\übungen\rpgengine\entities.cpp(38) : error C2440: 'return' : 'class Inventory (__thiscall Player::*)(void)' kann nicht in 'class Inventory &' konvertiert werden Ein Verweis, der nicht auf ein 'const' zeigt, kann nicht an einen Wert gebunden werden, bei dem es sich nicht um einen L-Wert handelt Inventory.cpp Items.cpp d:\c++\vc6\übungen\rpgengine\entities.h(32) : error C2059: Syntaxfehler : 'constant' main.cpp d:\c++\vc6\übungen\rpgengine\entities.h(32) : error C2059: Syntaxfehler : 'constant' Fehler beim Ausführen von cl.exe. RPGEngine.exe - 5 Fehler, 0 Warnung(en)
-
weil man ausserhalb des konstruktors nur static elemente initialisieren kann...
class Player : public Entities { Inventory inventory(2); public: Player(short foo) : inventory(foo){} };so sollte es klappen....
-
scheiss copy & paste ... das "(2)" bei inventory muss weg
-
Hmm das verstehe ich nicht so ganz, welchen Wert hat "slots" dann?
-
class Player : public Entities { Inventory inventory; public: Player(short foo) : inventory(foo){} };und dann... in der main... oder sonst wo:
Player bar(10); // slots = 10weil der wert den du zu Player in den Konstruktor eingibst zu Inventory durchgereicht wird
-
Aha danke!
-
Hm, irgendwie wirkt es unschön, wenn ich nur extra wegen der Slot-Anzahl so initialisieren muss.
Eigentlich ist unsigned short slots; schon ein private-Element von Player.//EDIT:
Ich hatte schon wieder einen Denkfehler.
Es geht doch viel einfacher, wenn ich beispielsweise inventory.setSlots(5) in den Player-Konstruktor schreibe
-
jo ... zumbeispiel so ... oder du uebergibts nen default wert mit in den player konstruktor
je nachdem was dir besser passt ... wenn die anzahl immer feststeht lieber mit set_slot(2) machen wenn sichs aendern kann als default wert ...
gruessle