ПрограммированиеФорумОбщее

шаблонная функция в классе

#0
21:08, 10 авг 2009
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


не могу понять в чем ошибся... так вообще можно?)

#1
21:17, 10 авг 2009

Въ FAQ

#2
21:20, 10 авг 2009

При компиляции выдается ошибка "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.

пасибо

#3
21:41, 10 авг 2009

lin.koder
> не могу понять в чем ошибся... так вообще можно?
Можно только если руками будут написаны специализации для всех типов, с которыми используется шаблонный метод.

#4
22:12, 10 авг 2009

template <> 
void ResourceManager::LoadResource(int** object)
{
 

};

так?

#5
22:57, 10 авг 2009

lin.koder
> так?
Да.

#6
0:52, 11 авг 2009

lin.koder

 template <>
 void ResourceManager::LoadResource<int>(int** object)
 {
 
 
 };

может так?

#7
2:17, 11 авг 2009

AndryBlack
без разницы, ибо компилятору тип параметра известен

#8
5:32, 11 авг 2009

вынеси всю функцию в .H файл

#9
18:46, 11 авг 2009

Юлий пасиб кэп =)
этот ответ уже в посте 2 был ;) все решено, за помощь спасибо)

ПрограммированиеФорумОбщее

Тема в архиве.