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 = 10
    

    weil 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


Anmelden zum Antworten