visual c++ et templates. pb de link...

visual c++ et templates. pb de link... - Programmation

Marsh Posté le 13-03-2001 à 11:12:30    

hello,
 
big probleme avec visual c++ (commence à me gaver celui là...)
je veux faire une classe template.
 
toto.h
------
template <class T> class toto
{
public:
 toto(void);
 ~toto(void);
 
 int Add(void);
private:
 T a;
};
 
 
toto.cpp
--------
template <class T> toto<T>::toto(void)
{
 a=0;
}
 
template <class T> toto<T>::~toto(void)
{
}
 
template <class T> T toto<T>::Add(void)
{
 return ++a;
}
 
 
test.cpp
--------
#include <toto.h>
 
void main(void)
{
toto<int> acme();
printf( "%d\n", acme.Add() );
}
 
 
---------
Bref, comme dans les bouquins...
Et ben ca fonctionne pas parce que j'ai des erreurs au link:
 
Test.obj : error LNK2001: unresolved external symbol "public: __thiscall toto<int>::~toto<int>(void)"
Test.obj : error LNK2001: unresolved external symbol "public: __thiscall toto<int>::toto<int>(void)"
Test.obj : error LNK2001: unresolved external symbol "public: int __thiscall toto<int>::Add<int>(void)"
 
 
bref, il trouve rien.
QQ1 peut m'aider, parce que je comprends pas ce qu'il faut lui dire à ce visual pour que ca fonctionne...
 
merci d'avance...

Reply

Marsh Posté le 13-03-2001 à 11:12:30   

Reply

Marsh Posté le 13-03-2001 à 12:25:55    

Pour les templates, c'est un traitement special.  
Ya pas de cpp. Tu mets tout dans toto.h.

Reply

Marsh Posté le 13-03-2001 à 13:45:45    

merci, ca fonctionne beaucoup mieux ;)
 
par contre, il me vient alors une autre question à l'esprit:
supposons que je veuille faire une libtairie avec la classe en question.
 
Habituellement, j'ai le header (.h) et les d"clarations (.cpp).
Je compile le tout, et je n'ai besoin de donner que le header et le .lib
 
Ici, j'ai tout dans un seul fichier...
Je suis obligé de tout donner?
 
C'est étonnant quand même cette obligation de devoir tout mettre dans le .h
surtout que j'ai pas trouvé une ligne qui dit ca dans le msdn... pas top, comme documentation, ce msdn....

Reply

Marsh Posté le 13-03-2001 à 13:56:12    

Mais comment veux tu que ta .lib intègre tous les cas d'utilisation de tes classes de templates ?
Si le client veut classe_template<classe_du_client>, il faut que le compilo puisse générer le code correspondant.

Reply

Marsh Posté le 13-03-2001 à 14:05:17    

donc obligé de filer le code source?...
Disons que je ne trouve pas cela pratique. Tout comme devoir laisser les définitions de méthodes dans le header... On arrive vite à des gros fichiers, et cela devient vite pénible...
 
Mais bon.
oki.
merci à vous.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed