[Dev-Cpp]:Linker findet Funktionen nicht
-
Ich hab folgenden Source:
//Items.hpp namespace Lala { namespace undef { class ItemAdmin { private: Warrior* owner; ELF::Container<Item*, MAX_ITEMS> Items; public: inline float getdmga() const;//lol inline float getdmgg() const;//lol inline float getdmg() const;//lol inline float getHP() const;//lol inline float getHPmax() const; inline float getmana() const; inline float getarmor() const;//lol inline float getfast() const; inline float getsee() const; inline float getfreq() const; inline float getradius() const; inline bool getflying() const;//lol inline bool getattackflyer() const;//lol inline float getGiveExp() const;//lol inline float getNowExp() const; inline float getManaRegeneration() const; inline float getHPRegeneration() const; inline float getneededexp() const; ItemAdmin(Warrior* nowner):owner(nowner){} virtual ~ItemAdmin() { Item* temp; temp = *Items.pop(); while(temp != 0) { delete temp; temp = *Items.pop(); } } inline void push(Item* newone){Items.push(newone);} inline Item* pop() { return *Items.pop(); } }; } } //Items.cpp #include "Items.hpp" inline float Lala::undef::ItemAdmin::getdmgg() const { float temp = owner->dmgg; for (int i=0; i < Items.getsize(); ++i) { temp += (*Items[i])->getdmgg(); } return temp; } inline float Lala::undef::ItemAdmin::getdmga() const { float temp = owner->dmga; for (int i=0; i<Items.getsize(); ++i) { temp += (*Items[i])->getdmga(); } return temp; } inline float Lala::undef::ItemAdmin::getdmg() const { float temp = owner->dmg; for (int i=0; i<Items.getsize(); ++i) { temp += (*Items[i])->getdmg(); } return temp; } inline float Lala::undef::ItemAdmin::getarmor() const { float temp = owner->armor; for (int i=0; i<Items.getsize(); ++i) { temp += (*Items[i])->getarmor(); } return temp; } inline float Lala::undef::ItemAdmin::getfreq() const { float temp = owner->freq; for (int i=0; i<Items.getsize(); ++i) { temp += (*Items[i])->getfreq(); } return temp; } inline float Lala::undef::ItemAdmin::getHP() const { float temp = owner->HP; for (int i=0; i<Items.getsize(); ++i) { temp += (*Items[i])->getHP(); } return temp; } inline float Lala::undef::ItemAdmin::getHPmax() const { float temp = owner->HP_max; for (int i=0; i<Items.getsize(); ++i) { temp += (*Items[i])->getHP_max(); } return temp; } inline bool Lala::undef::ItemAdmin::getflying() const { for (int i=0; i<Items.getsize(); ++i) { if((*Items[i])->getflying()) { return true; } } return owner->flying; } inline bool Lala::undef::ItemAdmin::getattackflyer() const { for (int i=0; i<Items.getsize(); ++i) { if((*Items[i])->getattackflyer()) { return true; } } return owner->flying; } inline float Lala::undef::ItemAdmin::getmana() const { float temp = owner->mana; for (int i=0; i<Items.getsize(); ++i) { temp += (*Items[i])->getmana(); } return temp; } inline float Lala::undef::ItemAdmin::getfast() const { float temp = owner->fast; for (int i=0; i<Items.getsize(); ++i) { temp += (*Items[i])->getfast(); } return temp; } inline float Lala::undef::ItemAdmin::getsee() const { float temp = owner->see; for (int i=0; i<Items.getsize(); ++i) { temp += (*Items[i])->getsee(); } return temp; } inline float Lala::undef::ItemAdmin::getradius() const { float temp = owner->radius; for (int i=0; i<Items.getsize(); ++i) { temp += (*Items[i])->getradius(); } return temp; } inline float Lala::undef::ItemAdmin::getNowExp() const { float temp = owner->NowExp; for (int i=0; i<Items.getsize(); ++i) { temp += (*Items[i])->getNowExp(); } return temp; } inline float Lala::undef::ItemAdmin::getGiveExp() const { float temp = owner->GiveExp; for (int i=0; i<Items.getsize(); ++i) { temp += (*Items[i])->getGiveExp(); } return temp; } inline float Lala::undef::ItemAdmin::getManaRegeneration() const { float temp = owner->ManaRegeneration; for (int i=0; i<Items.getsize(); ++i) { temp += (*Items[i])->getManaRegeneration(); } return temp; } inline float Lala::undef::ItemAdmin::getHPRegeneration() const { float temp = owner->HPRegeneration; for (int i=0; i<Items.getsize(); ++i) { temp += (*Items[i])->getHPRegeneration(); } return temp; } inline float Lala::undef::ItemAdmin::getneededexp() const { float temp = owner->NeededExp; for (int i=0; i<Items.getsize(); ++i) { temp += (*Items[i])->getneededexp(); } return temp; }
Sorry für den langen source. Bekomm dann folgende Fehler, es sind aber nur 12, nicht 18, ich hab die mitn fehlern mitn lol gekennzeichnet, mir fällt aber nichts besonderes daran auf.
Hier die Fehler:[Linker error] undefined reference to `ELF::Model::ItemAdmin::getHP() const'
und das 12 mal für die mit lol gekennzeichneten Funktionen, teilweise auch doppelt.
Woran liegt das und wie kann ich das beheben???
-
lass doch mal das inline weg. ist sowieso unnütz.
-
Bist du sicher, dass du uns hier den betreffenden Code gepostet hast? Deine Funktionen sind ja aus Lala::undef::ItemAdmin::..., der Linker beschwert sich aber über ELF::Model::ItemAdmin::... Funktionen. Irgendwie past das nicht.
Das inline solltest du aber auf jedenfall wegmachen.
-
Hab die namespaces umbenannt, C&P fehler, außerdem hab ich die inlines in der Definition weggemacht ==> kein unterschied.
-
Habs auch in der Daklaration weg gemacht --> kein Effekt
-
weis keiner weiter?
-
Aus deinen Angaben kann man einfach recht wenig Infos rausholen. Es gibt keinen Grund, warum der Linker nur bei bestimmten Funktionen meckert. Entweder bei allen oder gar nicht. Kann es sein, dass auch nur die von dir markierten Funktionen aufgerufen werden, und die anderen nicht? Ich vermute immer noch, dass du ein generelles Problem hast. Als nächstes würde ich auf jedenfall mal versuchen, alle Funktionen im dem Namensraum zu definieren, in dem auch ItemAdmin liegt. Auch wenn das vermutlich nichts bringen wird. Ich würde zusätzlich auch nochmal alle Klassen- und Namensraum-Bezeichner prüfen. Wenn du schon beim Posten hier durcheinander kommst, dann ist das in deinem Code auch nicht auszuschliessen.
-
Frag mich nicht warum, aber die Funktionen im namespace zu deklarieren hats gelöst, thx