Problème avec les templates

Signaler
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
-
Messages postés
949
Date d'inscription
mardi 2 octobre 2001
Statut
Membre
Dernière intervention
8 juillet 2006
-
J'ai un petit problème en voulant compiler ceci (avec visual C++ 6):

////////////////////////////////////
// Truc.h

template <class T>
class Truc
{
public:
Truc(int a);
};

////////////////////////////////////
// Truc.cpp

#include "Truc.h"

template <class T> Truc<T>::Truc(int a)
{
}

////////////////////////////////////
// main.cpp

#include "Truc.h"

int main()
{
Truc a(2);
return 0;
}

Et j'obtiens le message suivant:

Compiling...
Truc.cpp
main.cpp
Linking...
main.obj : error LNK2001: unresolved external symbol "public: __thiscall Truc::Truc(int)" (??0?$Truc@H@@QAE@H@Z)
Debug/temp.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.

temp.exe - 2 error(s), 0 warning(s)

Par contre en mettant la fonction main dans le fichier Truc.cpp, pas de problème. Je pense que c'est dû à l'utilisation des templates, car le même code sans template se lie normalement.
Merci de m'aider

1 réponse

Messages postés
949
Date d'inscription
mardi 2 octobre 2001
Statut
Membre
Dernière intervention
8 juillet 2006

Le code d'une classe template se place dans le fichier include et non dans un fichier source.

Truc.h

template <class T>
class Truc
{
public:
Truc(int a);
};

template <class T>
Truc<T>::Truc(int a)
{
}

Kaid - kaid.fr.st