Template... erreur tte bete surement... [C++] - C++ - Programmation
Marsh Posté le 25-01-2006 à 23:25:55
le compilateur a besoin du code pour instancier ton template, une solution est de mettre le code dans le fichier d'en-tete ou d'inclure à la place le .cpp (avec accessoirement une autre extension)
Marsh Posté le 26-01-2006 à 00:25:51
bah dans le main et dans le .cpp j'ai inclus ca:
Code :
|
... sinon je comprends pas ce que tu me dis...
Marsh Posté le 26-01-2006 à 00:34:34
pour faire simple, mets le contenu du .cpp dans Personne.h
Marsh Posté le 26-01-2006 à 08:46:11
et y'a pas moyen de faire autrement???
c franchement pas terrible :-SSSSS
Marsh Posté le 26-01-2006 à 08:53:48
bah apres y'a eds bricoles, mais dans l'idée, non
Citation : T Personne::Max(const T value1, const T value2) |
Tu fais de la recopie plein pot, la, et tes const en param servent a pas grand chose...Passe par reference plutot
Marsh Posté le 26-01-2006 à 09:09:53
Sous windows les templates sont chiants à programmer car tu ne peux dissocier l'entête et le source de la fonction.
Exemple d'un fichier avec déclaration de template :
Code :
|
Marsh Posté le 26-01-2006 à 09:22:16
mais ce n'est pas lié à windows ??
je crois qu'avec l'instenciation explicite on doit pouvoir compiler séparément le fichier qui contient les définitions mais le nombre d'instenciation devient limité
http://www.linux-kheops.com/doc/co [...] /x4522.htm
Marsh Posté le 26-01-2006 à 09:32:33
LordPeterPan a écrit : Sous windows les templates sont chiants à programmer car tu ne peux dissocier l'entête et le source de la fonction. |
Aucun rapport avec windows
Un seul compilo gére la declaration séparé des templates. Mais pas mal de gens (Sutter par exemple) en viennent à penser que c'est inutile, voire dangeruex.
http://std.dkuug.dk/jtc1/sc22/wg21 [...] /n1426.pdf
Marsh Posté le 26-01-2006 à 19:38:48
Joel F a écrit : Aucun rapport avec windows |
Sutter est l'un des seuls experts à penser cela. Son papier est assez controversé. Il justifie en s'appuyant sur la parole d'autres experts (ceux d'EDG je crois), qui ne sont en fait pas de son avis.
Marsh Posté le 27-01-2006 à 10:02:14
moi je suis d'accord avec joelf, l'export est très controversé et par beaucoup, sur beaucoup d'aspect d'ailleurs.
Marsh Posté le 30-01-2006 à 21:40:07
Taz a écrit : moi je suis d'accord avec joelf, l'export est très controversé et par beaucoup, |
par les lecteurs de Herb ?
Taz a écrit : sur beaucoup d'aspect d'ailleurs. |
Herb en fait une critique exhaustive. Il n'insiste pas sur un point, qui est le gain en temps de compilation "dans certains cas".
Les gens qui militent pour export, et qui l'ont expérimenté sur d'autres compilos, sont, je crois, convaincu de son intérêt.
Le papier anti-export visait à supprimer export. Au WG21, il y a eu un accord de principe qui disait, on maintient export tant qu'il n'y a pas de meilleure proposition (qui nécessiterait d'évincer export).
Le fait est qu'une proposition -- qui touche aussi d'autres aspects du langage -- pourrait faire son chemin, et généraliser export aux fonctions non-template et aux classes non-template. Ce n'est pas sur que ça évolue dans ce sens, mais c'est une possiblité ( et ça serait superbe !)
Marsh Posté le 31-01-2006 à 09:10:25
(ouais mais a quoi bon avoir un mot clé qui n'est supporté par presque aucun compilo ?)
Marsh Posté le 31-01-2006 à 11:50:08
le_duc a écrit :
|
1- tu ne precise pas quand tu construit 'p1' que ta classe va utiliser des <int>:
Personne<int> *p1 = new Personne<int>(); // je ne suis pas sur de l'ecriture exacte
2-
Code :
|
Fais attention: value1>value2 implique que l'operation > est definie pour la classe T, c'est le cas pour les types de base (int, double, char, ...) mais pas pour des classes autres (sauf si l'operateur est redefini/surcharger!).
Marsh Posté le 31-01-2006 à 17:54:41
breizhbugs a écrit : 1- tu ne precise pas quand tu construit 'p1' que ta classe va utiliser des <int>:
|
merci beaucoup!
Marsh Posté le 25-01-2006 à 22:27:30
je cherche mon erreur là-dedans, mais je trouve pas.... pourtant il doit juste manquer un "Personne::" qq part d'après le compilo non?
.h (dans les méthodes publiques de ma classe Personne)
.cpp
et l'appel du tout depuis le main:
ERREUR : Unresolved external 'int Personne::Max<int>(const int, const int)' referenced from c:\TEMP\PROGRAMME.OBJ
merci pour votre aide
Message édité par le_duc le 25-01-2006 à 22:29:29