namespace alary{
class ResourceManager
{
public:
ResourceManager();
template <class T>
void LoadResource(T** object);
};
}using namespace alary;
template <class T>
void ResourceManager::LoadResource(T** object)
{
};Error 2 error LNK2019: unresolved external symbol "public: void __thiscall alary::ResorceManager::LoadResource<int>(int * *)" (??$LoadResource@H@ResorceManager@alary@@QAEXPAPAH@Z) referenced in function "public: __thiscall alary::GraphicsManager::GraphicsManager(void)" (??0GraphicsManager@alary@@QAE@XZ) Graphics Manager.obj
не могу понять в чем ошибся... так вообще можно?)
При компиляции выдается ошибка "error LNK2019: unresolved external symbol "public: void __thiscall Test<int>::Proc(void)" (?Proc@?$Test@H@@QAEXXZ) referenced in function _main"
Как решить эту проблему?
Ответ:
На данный момент эту проблему решить можно только одним способом - писать реализацию методов также в заголовочном файле, поскольку ни один из современных компиляторов не поддерживает template export (кроме Comeau начиная с версии 4.3.01)
MSDN о Visual Studio:
The export keyword is not supported on templates.
пасибо
lin.koder
> не могу понять в чем ошибся... так вообще можно?
Можно только если руками будут написаны специализации для всех типов, с которыми используется шаблонный метод.
template <>
void ResourceManager::LoadResource(int** object)
{
};
так?
lin.koder
> так?
Да.
lin.koder
template <> void ResourceManager::LoadResource<int>(int** object) { };
может так?
AndryBlack
без разницы, ибо компилятору тип параметра известен
вынеси всю функцию в .H файл
Юлий пасиб кэп =)
этот ответ уже в посте 2 был ;) все решено, за помощь спасибо)
Тема в архиве.