Je sais qu'il me manque quelque chose de facile ici mais j'ai une fonction de membre modélisée d'une classe que j'ai spécialisée.spécialisation de modèle multipliez les symboles définis
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.
Ceci est défini dans mon fichier d'en-tête (en tant que modèles devraient être), mais quand je vais et compilent je reçois un tas de symboles mutliply définis, un représentant une telle erreur est:
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
je peux corrigez-le en indiquant les méthodes mais je ne pense pas que cela soit nécessaire ... qu'est-ce que j'ai oublié?
EDIT: J'utilise Visual Studio 2010
Quelle toolchain utilisez-vous? GCC? Quelque chose de visuel? Si GCC, à quoi ressemblent les lignes de construction et de liaison? –