Возникла проблема с функциями в шаблонном классе. Если описывать функции в хеадер файлах то все компилится и линкуется на ура, но если же перенести реализацию функций в отдельный файл(*.CPP), то все тоже компилится но не линкуется - пишет что реализация данной функции ненайдена или:
| Цитата | Error 2 error LNK2019: unresolved external symbol "public: bool __thiscall Resources::IResourceMgr<struct IDirect3DTexture9>::IsInit(void)" (?IsInit@?$IResourceMgr@UIDirect3DTexture9@@@Resources@@QAE_NXZ) referenced in function "public: virtual long __thiscall Resources::TextureMgr::Initialize(struct IDirect3DDevice9 *)" (?Initialize@TextureMgr@Resources@@UAEJPAUIDirect3DDevice9@@@Z) RTextureMgr.obj
|
Вот так работает: IResourceMgr.h
| Код | #pragma once
namespace Resources { template<typename TypeOf> class IResourceMgr { protected: vector<Resource<TypeOf>> _resources; bool _isInit; public: IResourceMgr<TypeOf>::IResourceMgr() { _isInit = false; }
IResourceMgr<TypeOf>::~IResourceMgr() { _resources.clear(); }
//....
/* State of class */ bool IsInit(); }; template<typename TypeOf> bool IResourceMgr<TypeOf>::IsInit() { return _isInit; } }
|
Почему не работает так?: IResourceMgr.h - только обьявление функции IsInit()
| Код | #pragma once
namespace Resources { template<typename TypeOf> class IResourceMgr { protected: vector<Resource<TypeOf>> _resources; bool _isInit; public: IResourceMgr<TypeOf>::IResourceMgr() { _isInit = false; }
IResourceMgr<TypeOf>::~IResourceMgr() { _resources.clear(); }
//.... // // НЕТУ РЕАЛИЗАЦИИ см. "IResourceMgr.cpp" // /* State of class */ bool IsInit(); }; }
|
IResourceMgr.cpp - реализация ф-и IsInit
| Код | #include "StdAfx.h" #include "RIResourceMgr.h"
namespace Resources { template<typename TypeOf> bool IResourceMgr<TypeOf>::IsInit() { return _isInit; } }
|
|