Problem mit Dequeuewrapper und devcpp



  • Der ist zugegebn nicht aussagevoll, mir ist aber nichts besseres eingefallen.
    Ich habe mir einen Dequewrapper geschrieben, der u.a. eine Intvariable enthält, die die Größe wiedergibt. Außerdem auch die Funktion getsize, die eben diesen Wert zurück gibt. ZUr Information: Ich schreibe ein Strategiespiel, in diesem gibt es Einheiten dier Items tragen können. Um diese zu verwalten gibt es einen Verwalter, der in meinem Dequeuewrapper die Items speichert. Hier ist eine Funktion des Verwalters, die bestimmt, wie hoch die Stärke der Einheit ist, plus eventueller Boni durch Items:

    float temp = owner->dmgg; //owner ist die Einheit, dmgg der Schaden
        for (int i=0; i < Items.getsize(); ++i)
        {
            temp += Items[i]->getdmgg(); //getdmgg gibt en Bonus zurück
        }
        return temp;
    

    Der compiler sagt:
    passing `const Container<ELF::Model::Item*, 8>' as `this' argument of unsigned int Container<T, maxsize>::getsize() [with T = in Zeile 2 und passing \const Container<ELF::Model::Item*, 8>' as `this' argument of `T Container<T, maxsize>::operator[](unsigned int) [with T =
    in Zeile 4

    Warum das, es müste alles richtig sein, ich versteh nicht was Devcpp von mir will.

    Danke im Voraus



  • Glamdrink schrieb:

    Warum das, es müste alles richtig sein, ich versteh nicht was Devcpp von mir will.

    zeig mir bitte :
    unsigned int Container<T, maxsize>::getsize()
    T Container<T, maxsize>::operator[](unsigned int)
    und wie du Items definierst



  • Das Problem ist, die funktion size gibt nur ein int zurück, der Compiler hat sich aber in den Kopf gesetzt, dass er die Funktion als unsigned int benutzt. Wenn man das alles aber zu unsigned int macht kommt der selbe Fehler.

    class DLL Item
    		{
    			friend class ItemAdmin;
    
    		protected:
    			virtual inline float  getdmga()             const {return 0;}
    			virtual inline float  getdmgg()             const {return 0;}
    			virtual inline float  getdmg()              const {return 0;}
    			virtual inline float  getHP()               const {return 0;}
    			virtual inline float  getHP_max()           const {return 0;}
    			virtual inline float  getmana()             const {return 0;}
    			virtual inline float  getarmor()            const {return 0;}
    			virtual inline float  getfast()             const {return 0;}
    			virtual inline float  getsee()              const {return 0;}
    			virtual inline float  getfreq()             const {return 0;}
    			virtual inline float  getradius()           const {return 0;}
    			virtual inline bool   getflying()           const {return false;}
    			virtual inline bool   getattackflyer()      const {return false;}
    			virtual inline float  getGiveExp()          const {return 0;}
    			virtual inline float  getNowExp()           const {return 0;}
    			virtual inline float  getManaRegeneration() const {return 0;}
    			virtual inline float  getHPRegeneration()   const {return 0;}
    			virtual inline float  getdexternity()       const {return 0;}
    
    		public:
    			Item(){}
    			virtual ~Item(){}
    		};
    
        inline T operator[](size_t ang){if(ang < size)return Data[ang];}
        unsigned int getsize(){return size;}
    


  • mach mal so:

    [cpp]inline T operator[] (size_t ang) /!!!/const
    {
    if(ang < size)
    return Data[ang];
    }

    unsigned int getsize() /!!!/const
    {
    return size;
    } [/cpp]



  • Mist, muss ich übersehen haben,

    thx



  • btw: warum machst du dllitem nicht abstrakt?



  • Wüsste nicht was das für Vorteile hätte, außer, dass jede Subklasse jede Funktion redefinieren müsste, was ich unpraktisch finde, wenn sie ohnehin keine Änderungen vornehmen.


Anmelden zum Antworten