"nicht aufgelöste Extenre" [C++/SFML]



  • Hallo zusammen,

    ich versuche gerade seit guten 2 Stunden ein Problem zu lösen, das ich mit SFML habe. Hier nur ein paar Infos:
    - Visual Studio 2013
    - Win 7
    - SFML/C++
    so, das Problem ist, das ich immer diese Fehlermeldung erhalte:

    Fehler	1	error LNK2001: Nicht aufgelöstes externes Symbol ""public: void __thiscall Kollision::box2box(class std::_Vector_iterator<class std::_Vector_val<struct std::_Simple_types<class Bullet> > > &,class std::vector<class Zombie,class std::allocator<class Zombie> > &)" (?box2box@Kollision@@QAEXAAV?$_Vector_iterator@V?$_Vector_val@U?$_Simple_types@VBullet@@@std@@@std@@@std@@AAV?$vector@VZombie@@V?$allocator@VZombie@@@std@@@3@@Z)".	C:\Users\Moritz\Documents\Visual Studio 2013\Projects\SFML\SFML\SFML.obj	SFML
    

    Ich hab schon gegooglet, was zu bedeuten hab usw. und hab gelesen das bei manchen z.B. eine Bibliothek nicht richtig gelinkt wurde.
    Das kann ich allerdings zu 99% ausschließen, da es vor 2 Stunden nämlich noch ging und davor auch.
    Also hab ich jetzt ewig die .h Dateien hin und her geschoben und Zeug in der stdafx.h geändert, aber es bleibt immer die selbe Meldung.

    Hier mal mein Code:

    main.cpp (Ausschnitt):

    //hier oben includes und bla
    
    for (it = bullets.begin(); it != bullets.end();)
    		{
    			if (!it->Active)
    			{
    				it = bullets.erase(it);
    			}
    			else {
    				collision.box2box(it, zombies);
    				it->Update(window, ElapsedTime);
    				it->Render(window);
    				++it;
    
    			}
    		}
    

    collision.h:

    #include "zombie.h"
    #include "bullet.h"
    #include <vector>
    
    class Kollision
    {
    public:
    	void box2box(std::vector<Bullet>::iterator &Obj, std::vector<Zombie> &ObjList);
    };
    

    collision.cpp:

    #include "stdafx.h"
    
    void box2box(std::vector<Bullet>::iterator &Obj, std::vector<Zombie> &ObjList)
    {
    	for (int i = 0; i < ObjList.size(); i++)
    	{
    		if (ObjList[i].Active)
    		{
    			if (Obj->BulletSprite.getGlobalBounds().intersects(ObjList[i].zombieSprite.getGlobalBounds()))
    			{
    				ObjList[i].Active = false;
    				Obj->Active = false;
    			}
    		}
    	}
    }
    

    Ich hoffe, mir kann jemand helfen...
    Danke und viele Grüße
    Cyax



  • In der collision.cpp definierst du eine FREIE Funktion box2box.
    Du willst aber eine MEMBER Funktion deklarieren, dazu musst du Kollision::box2box schreiben.
    Und wieso überhaupt eine Klasse, die hat doch gar keine Membervariablen?
    Und das hat übrigens nichts mit SFML zu tun.



  • Ah ja, danke funktioniert 🙂
    ...inwiefern meinst du das das nichts mit SFML zu tun hat??
    Gruß
    Cyax



  • Cyax schrieb:

    Ah ja, danke funktioniert 🙂
    ...inwiefern meinst du das das nichts mit SFML zu tun hat??

    Dieses Problem ist eins mit der Benutzung von C++ an sich, nicht allein mit SFML:
    http://ideone.com/eetFNz


Anmelden zum Antworten