Sé que aquí me falta algo fácil, pero tengo una función de miembro con plantilla de una clase que he especializado.especialización de plantillas símbolos de multiplicación definida
MyClass
{
template<typename T> T GetTFromVariable(shared_ptr<TOtSimpleVariable> v, string s);
}
template<typename T>
T MyClass::GetTFromVariable(shared_ptr<TOtSimpleVariable> v, string s)
{
throw std::runtime_error("Don't know how to convert " + ToString(v->GetString()));
}
template<>
int MyClass::GetTFromVariable<int>(shared_ptr<TOtSimpleVariable> v, string s)
{
return v->GetInteger();
}
template<>
string MyClass::GetTFromVariable<string>(shared_ptr<TOtSimpleVariable> v, string s)
{
return v->GetString();
}
// etc for other specialisations.
Esto se define en mi archivo de cabecera (como plantillas deben ser) pero cuando voy y compilar me sale un montón de símbolos mutliply definidos, un error de este tipo representativo es:
OtCustomZenith_logic.lib(PtPathOutput.obj) : error LNK2005: "public: class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __thiscall MyClass::GetTFromVariable<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > >(class boost::shared_ptr<class TOtSimpleVariable>,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)" ([email protected][email protected][email protected]@[email protected]@[email protected]@[email protected]@[email protected]@@[email protected]@[email protected][email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@@@[email protected]@[email protected]@Z) already defined in TableFareSystem_test.obj
que pueda arréglelo haciendo hincapié en los métodos, pero no creo que sea necesario ... ¿qué olvidé?
EDIT: Estoy usando Visual Studio 2010
¿Qué cadena de herramientas estás utilizando? GCC? ¿Visual algo? Si GCC, ¿cómo se ven las líneas de compilación y enlace? –