Template et surcharge d'operateurs

Résolu/Fermé
Ouups66 - 7 juil. 2010 à 18:18
 Ouups - 7 juil. 2010 à 23:53
Bonjour,
Dans le cas ou l'on surcharge des operateurs qui sont des methodes "friend" de la classe il faut ecrire le code dans un fichier .cpp a part. Ce que je ne comprends pas c'est comment si l'on utilise les templates inclure ce code pour qu'il soit correctement vu?...
Car je fais un #include "<nomdefichier>.tpp" ce qui ne pose pas de probleme et me permet d'effectuer la declaration du code de facon separer et de ne pas tout avoir dans le .h
En revanche j'obtiens a la compil un Warning:
..._Stype.h:193: warning: friend declaration `_Stype<T> operator+(const _Stype<T>&, const _Stype<T>&)' declares a non-template function

ce qui se traduit dans le programme de test(main):
...main.cpp:129: undefined reference to 'operator*(_Stype<float> const&, _Stype<float> const&)'

et par consequent comme il ne comprends pas ou chercher la fonction ou quoi lui passer au linkage j'ai ca:
:-1: error: collect2: ld returned 1 exit status

Donc si qq1 comprends comment on peut faire je suis ouvert a toutes suggestion.

Merci d'avance.


1 réponse

j'avais pas assez cherche!!! (oui je sais c'est pas bien ;o)

https://www.developpez.net/forums/d22604/c-cpp/cpp/templates-friend/

voir le post de "laurent gomila" la solution se trouve en fait dans une utilisation particuliere lorsqu'on utilise les templates avec la surcharge des operateurs et friend donc il fallait rendre le type de la donnee lui aussi generique!

Mon code compile et je peux change mes types come je le souhaite.
Voila j'espere que ca pourra quand meme aider un petit peu.
3