Dans exemple.cc tu as mis ça
template <typename T>
Exemple<T>::Exemple(){
std::cout << "ceci est un exemple" << std::endl;
}
Pour le compilateur c'est pareil que que ce qu'il voit dans exemple.cpp (je mets exemple.cpp, parce que exemple.tpp me déplait ;) :) ) c'est à dire:
template <typename T>
Exemple<T>::Exemple()
{
}
Pour lui qu'il y ait std::cout dans l'un et pas dans l'autre ça ne change rien. Il voit une redéfinition du constructeur et il râle.
Remède:
- tu vires totalement la redéfinition de exemple.cpp
- dans exemple.cpp (pas .tpp :) ) tu mets
template <typename T>
Exemple<T>::Exemple(){
std::cout << "ceci est un exemple" << std::endl;
}
C'est à dire qu'il y avait dans exemple.cpp
Et ça ira.
Maintenant une remarque.
Tu écris une classe générique qui ne fait rien de son type générique. Cela n'a pas grand sens. Je suppose que tu vas dire que tu t'entraînes. Mais dans ce cas je te propose de t'entraîner à sortir le type paramétré avec ton std::cout, plutôt que de sortir "ceci est un exemple" ;)
Dans exemple.cc tu as mis ça
Pour le compilateur c'est pareil que que ce qu'il voit dans exemple.cpp (je mets exemple.cpp, parce que exemple.tpp me déplait ;) :) ) c'est à dire:
Pour lui qu'il y ait std::cout dans l'un et pas dans l'autre ça ne change rien. Il voit une redéfinition du constructeur et il râle.
Remède:
- tu vires totalement la redéfinition de exemple.cpp
- dans exemple.cpp (pas .tpp :) ) tu mets
C'est à dire qu'il y avait dans exemple.cpp
Et ça ira.
Maintenant une remarque.
Tu écris une classe générique qui ne fait rien de son type générique. Cela n'a pas grand sens. Je suppose que tu vas dire que tu t'entraînes. Mais dans ce cas je te propose de t'entraîner à sortir le type paramétré avec ton std::cout, plutôt que de sortir "ceci est un exemple" ;)