tengo una clase llamada "SimObject":no puede exportar función de plantilla
namespace simBase
{
class __declspec(dllexport) SimObject: public SimSomething
{
public:
template <class T>
void updateParamValue(const std::string& name, T val);
}
}
tengo otra clase llamada "ITerrainDrawable":
namespace simTerrain
{
class __declspec(dllexport) ITerrainDrawable : public simBase::SimObject
{
}
}
Estas clases están en diferentes bibliotecas. SimObject está en simBase, ITerrainDrawable está en las bibliotecas de simTerrain. Incluso si ITerrainDrawable se deriva de SimObject y que incluye la biblioteca de simBase, me sale un error de enlace:
unresolved external symbol
1>ITerrainDrawable.obj : error LNK2019: unresolved external symbol "public: void __thiscall simBase::SimObject::updateParamValue<float>(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,float)" ([email protected]@[email protected]@@[email protected][email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]) referenced in function "public: void __thiscall simTerrain::ITerrainDrawable::setTerrainSize(float)" ([email protected]@[email protected]@[email protected])
1>ITerrainDrawable.obj : error LNK2019: unresolved external symbol "public: void __thiscall simBase::SimObject::updateParamValue<class osg::Vec4f>(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,class osg::Vec4f)" ([email protected]@[email protected]@@[email protected]@@[email protected][email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@@@Z) referenced in function "public: void __thiscall simTerrain::ITerrainDrawable::setSatelliteTextureBorders(class osg::Vec2f,class osg::Vec2f)" ([email protected]@[email protected]@[email protected]@@[email protected])
¿Por qué obtengo este error?
Todo funciona bien si no uso la función de plantilla pero la necesito.
Si muevo esta función a la biblioteca simTerrain funciona bien, pero no quiero usar la función duplicada porque hay muchas bibliotecas como simTerrain.
gracias Neil :) funcionó cuando muevo la definición de la función al encabezado – ufukgun