[geloest] problem mit vererbung und templates error LNK2019
-
hi
ich versuche grad nen simplen ressourcen manager zu schreiben und wollte dafür ne basisklasse haben und dann davon ableitungen für die jeweiligen ressourcen.ich versuch das ganze über templates zu machen und den jeweiligen typ dann erst im kind festzulegen.
jetzt bekomme ich aber immer den fehler (VS2008)
error LNK2019: unresolved external symbol "public: __thiscall jg::ResourceManager<class sf::Image>::ResourceManager<class sf::Image>(void)" (??0?$ResourceManager@VImage@sf@@@jg@@QAE@XZ) referenced in function "public: __thiscall jg::SFImageManager::SFImageManager(void)" (??0SFImageManager@jg@@QAE@XZ) SFImageManager.obj
sieht mir stark nach nem problem mit der verwendung von templates aus. ich steig aber nicht durch.
mein kopf sieht so aus
template <class T> class ResourceManager : public Singleton<ResourceManager<T>>und
class SFImageManager : public ResourceManager<sf::Image>vielleicht reicht das schon, ansonsten hier den ganzen code (nicht viel).
SFImageManager:ResourceManager
.hpp
.cppIst wahrscheinlich ein sehr grundlegender Fehler.. ich bin noch anfänger in cpp.
jeden tipp nehme ich gerne an.
danke schonmal für die hilfe
mfg
-
Ist ein häufiges Problem bei Anfängern mit Templates, weil die Aufteilung in Header und Implementierung bei Templates nicht mehr wirklich klappt.
Siehe hier http://www.c-plusplus.net/forum/viewtopic-var-t-is-39467.html
Felix
-
hmm jaa aber wenn ich die kind klasse auskommentiere, bekomm ich keinen fehler und nur die elternklasse ist ja ein template.
///edit
ok das liegt wohl dadran das der fehler erst auftritt wenn man den header einbindet...////edit
ok, habs jetzt so gemacht
#include "resourcemanager.inl"dennoch bekomm ich jetzt folgenden fehler:
error LNK2001: unresolved external symbol "protected: virtual class sf::Image * __thiscall jg::ResourceManager<class sf::Image>::LoadDataProcedure(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (?LoadDataProcedure@?basic_string@DU?allocator@D@2@@std@@@Z) SFImageManager.obj
Ist es überhaupt möglich eine funktion abstrakt zu deklarieren
protected: virtual T* LoadDataProcedure(const std::string &fileName);und in der ableitung zu erstellen?
sf::Image* LoadDataProcedure(const std::string &fileName);/////edit
ok vergesst es^^ ich sollte vielleicht immer vorher gucken wie man sowas macht.virtual T* LoadDataProcedure(const std::string &fileName)=0;