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 ofunsigned 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 4Warum 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.