[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???


  • Mod

    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


Anmelden zum Antworten