Template [Visual C++] - C++ - Programmation
Marsh Posté le 13-06-2005 à 16:19:07
il semble que ton .cpp est quand meme compilé separement, met une extension bidon pour voir
Marsh Posté le 13-06-2005 à 16:50:12
J'ai renomé le .cpp en .cxx mais ca ne marche pas.
Il me dit tjrs que les focntions sont déjà définies
Marsh Posté le 13-06-2005 à 16:52:10
bidon, on a dit
cxx, ça part à la compilation aussi
tmpl par exemple
Marsh Posté le 13-06-2005 à 17:05:56
Ok ca marche avec une extension bidon.
Pourrais-je avoir une explication?
A quoi servent les .cxx alors?
Marsh Posté le 13-06-2005 à 17:23:28
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?
Marsh Posté le 13-06-2005 à 17:27:41
AsTro a écrit : Pourqoui il ne faut pas que le fichier passe en compilation? |
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...
Marsh Posté le 13-06-2005 à 17:32:01
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)
Marsh Posté le 13-06-2005 à 17:36:10
dans ma libc++ ils utilisent .tcc, personnelement j'utiliserais autre chose que .cpp, .cxx
Marsh Posté le 13-06-2005 à 17:40:04
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 ...
Marsh Posté le 13-06-2005 à 17:46:14
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?
Marsh Posté le 13-06-2005 à 17:51:50
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)
Marsh Posté le 13-06-2005 à 16:02:34
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 :
et Maillon.cpp :
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