Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1053 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [Visual C++]Template

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Visual C++]Template

n°1118491
AsTro
Posté le 13-06-2005 à 16:02:34  profilanswer
 

Salut,
J'ai des fichiers qui focntionnent tres bien avec gcc et un makefile sous linux mais sous visual C++ rien a faire j'ai des blemes dans tous les sens.
Voici un exemple pris sur le net que j'ai modifié (#include "Maillon.cpp" a la fin de Maillon.h):
Maillon.h :

Code :
  1. pragma once
  2. template <typename T>
  3. class Maillon
  4. {
  5.     T elem;
  6.     Maillon *suivant;
  7.     Maillon *precedent;
  8. public :
  9.    
  10. Maillon();
  11.     Maillon *LireSuivant (); 
  12.     Maillon *LirePrecedent ();
  13.     T LireElem();
  14.     void EcrireSuivant (Maillon *);
  15.     void EcrirePrecedent (Maillon *);
  16.     void EcrireElem (T);
  17. };
  18. #include "Maillon.cpp"


 
et Maillon.cpp :

Code :
  1. #include "Maillon.h"
  2. template <typename T>
  3. Maillon<T>::Maillon()
  4. {}
  5. template <typename T>
  6. Maillon<T>* Maillon<T> :: LireSuivant () 
  7.     {return suivant;}
  8. template <typename T>
  9. Maillon<T>* Maillon<T>:: LirePrecedent () 
  10.     {return precedent;}
  11. template <typename T>
  12. void Maillon<T> :: EcrireSuivant (Maillon *m)
  13.     {suivant=m;}
  14. template <typename T>
  15. void Maillon<T> :: EcrirePrecedent (Maillon *m)
  16.     {precedent=m;}


 
J'ai mis le fichier .cpp en : "Not Using Precompiled Headers"
et je me bouffe les erreurs :
 
d:\Projet GetInfo\src\test\Maillon.cpp(5): error C2995: 'Maillon<T>::Maillon(void)' : template function has already been defined
d:\Projet GetInfo\src\test\Maillon.cpp(9): error C2995: 'Maillon<T> *Maillon<T>::LireSuivant(void)' : template function has already been defined
d:\Projet GetInfo\src\test\Maillon.cpp(13): error C2995: 'Maillon<T> *Maillon<T>::LirePrecedent(void)' : template function has already been defined
d:\Projet GetInfo\src\test\Maillon.cpp(17): error C2995: 'void Maillon<T>::EcrireSuivant(Maillon<T> *)' : template function has already been defined
d:\Projet GetInfo\src\test\Maillon.cpp(21): error C2995: 'void Maillon<T>::EcrirePrecedent(Maillon<T> *)' : template function has already been defined
d:\Projet GetInfo\src\test\Maillon.cpp(25): error C2995: 'void Maillon<T>::EcrireElem(T)' : template function has already been defined
...
...
 
 
si je vire le include "Maillon.h" j'ai :
 
d:\Projet GetInfo\src\test\Maillon.cpp(3): error C2143: syntax error : missing ';' before '<'
d:\Projet GetInfo\src\test\Maillon.cpp(3): error C2501: 'Maillon' : missing storage-class or type specifiers
d:\Projet GetInfo\src\test\Maillon.cpp(3): error C2988: unrecognizable template declaration/definition
d:\Projet GetInfo\src\test\Maillon.cpp(8): error C2447: '{' : missing function header (old-style formal list?)
d:\Projet GetInfo\src\test\Maillon.cpp(7): error C2039: 'LireSuivant' : is not a member of 'operator``global namespace'''
d:\Projet GetInfo\src\test\Maillon.cpp(3): error C2059: syntax error : '<'
d:\Projet GetInfo\src\test\Maillon.cpp(8): error C2143: syntax error : missing ';' before '{'
...
...
 
 
Ca me soule, help me please :(
 
 
PS : je suis sous Visual studio .NET


Message édité par AsTro le 13-06-2005 à 16:04:26
mood
Publicité
Posté le 13-06-2005 à 16:02:34  profilanswer
 

n°1118515
skelter
Posté le 13-06-2005 à 16:19:07  profilanswer
 

il semble que ton .cpp est quand meme compilé separement, met une extension bidon pour voir

n°1118548
AsTro
Posté le 13-06-2005 à 16:50:12  profilanswer
 

J'ai renomé le .cpp en .cxx mais ca ne marche pas.
Il me dit tjrs que les focntions sont déjà définies :(

n°1118549
elianor
bannie 17 fois
Posté le 13-06-2005 à 16:52:10  profilanswer
 

bidon, on a dit :o
 
cxx, ça part à la compilation aussi :o  
 
tmpl par exemple :o


Message édité par elianor le 13-06-2005 à 16:52:33

---------------
JE JE SUIS LIBERTINEEEEEEEEEEE JE SUIS UNE CATINNNNNNNNN §§§§§§§§
n°1118574
AsTro
Posté le 13-06-2005 à 17:05:56  profilanswer
 

Ok ca marche avec une extension bidon.
Pourrais-je avoir une explication?
A quoi servent les .cxx alors?

n°1118597
skelter
Posté le 13-06-2005 à 17:14:56  profilanswer
 

comme .cpp et .C (pas .c)

n°1118607
AsTro
Posté le 13-06-2005 à 17:21:40  profilanswer
 

skelter a écrit :

comme .cpp et .C (pas .c)


!?

n°1118610
AsTro
Posté le 13-06-2005 à 17:23:28  profilanswer
 

Pourqoui il ne faut pas que le fichier passe en compilation?
C'est pour qu'il passe à la compilation indirectement grace au include du .h et pas directement c'est ca?

n°1118612
skelter
Posté le 13-06-2005 à 17:24:17  profilanswer
 

cxx, cpp, C sont des extensions pour sources C++

n°1118617
skelter
Posté le 13-06-2005 à 17:27:41  profilanswer
 

AsTro a écrit :

Pourqoui il ne faut pas que le fichier passe en compilation?
C'est pour qu'il passe à la compilation indirectement grace au include du .h et pas directement c'est ca?


 
le code template doit etre connu pour chaque unité de compilation donc on le met habituelement dans le fichier d'entete ou on se dermerde pour qu'il s'y trouve apres passage du preprocesseur (comme tu fais)
si ton compilateur a la bonne idée de compiler en plus le .cpp tu auras multiple definition...


Message édité par skelter le 13-06-2005 à 17:28:23
mood
Publicité
Posté le 13-06-2005 à 17:27:41  profilanswer
 

n°1118620
AsTro
Posté le 13-06-2005 à 17:32:01  profilanswer
 

Ok.
En fait je l'ai appellé .cxx et clique droit sur le fichier, propriété et Excluded From Build ---> yes.
 
Je sais pas quel solution est plus propre? (.tpl ou .cxx/cpp avec le excluded)

n°1118625
skelter
Posté le 13-06-2005 à 17:36:10  profilanswer
 

dans ma libc++ ils utilisent .tcc, personnelement j'utiliserais autre chose que .cpp, .cxx

n°1118631
AsTro
Posté le 13-06-2005 à 17:39:35  profilanswer
 

L'avantage c'est la coloration syntaxique.

n°1118632
Taz
bisounours-codeur
Posté le 13-06-2005 à 17:40:04  profilanswer
 

nan mais c'est une blague ou quoi ?
 
template -> tout mettre dans .h. Toi tu coupes en 2 : t'as un pragma once (pas standard) pour ton .h, mais rien pour ton .cpp. Résultat ton .cpp est inclus 4000 fois.
 
donc soit :
- tu mets tout dans ton .h
- tu coupes en deux .h : l'un garde son .h, et l'autre, par convention on mets .tpp. Dans les deux cas, il faut mettre des gardiens d'inclusion multiples ...
 
 
Y a des jours, je me dis que vous vous en sortirez jamais ...

n°1118636
AsTro
Posté le 13-06-2005 à 17:46:14  profilanswer
 

arf je t'attendais taz ;)
 
C'est quoi que tu appelles les gardiens d'inclusion multiple?
Et le pragma once il faut le virer dans le 1er .h? Seulement dans le .tpp non?


Message édité par AsTro le 13-06-2005 à 17:48:21
n°1118639
Taz
bisounours-codeur
Posté le 13-06-2005 à 17:51:50  profilanswer
 

dans ton ce qui est un fichier d'entête (quelque soit l'extension), tu fais
 
#ifndef BLABLABAJJDHDHADHADKDJKAKC
#define BLABLABAJJDHDHADHADKDJKAKC
 
////
 
#endif // BLABLABAJJDHDHADHADKDJKAKC
 
où BLABLABAJJDHDHADHADKDJKAKC est un putain de motif bien compliqué et bien unique (pas STACK_H)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [Visual C++]Template

 

Sujets relatifs
Visual Studio .NET pro & entreprise[Apprenti Programmeur] Je Recherche UnTutorial Pour Visual C++ 2005
[Visual C++] Recherche un équivalent de popen[Visual C++]Application Multilingue
Plusieurs questions en visual asicVisual Studio 6 et Visual Studio .Net sur la meme machine ?
Affichage de tout un bloc dans un templaterajouter un bouton dans un template phpbb
VB6 débutant : besoin daide ou de piste..!Lecture d'un mp3 avec Embedded Visual C++
Plus de sujets relatifs à : [Visual C++]Template


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR