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

  FORUM HardWare.fr
  Programmation
  C++

  [DevC++] problème de compilation avec des templates

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[DevC++] problème de compilation avec des templates

n°900118
Nico5779
Posté le 16-11-2004 à 20:33:33  profilanswer
 

Bonjour,
je voudrais compiler un simple programme en c++, mais je m'y perd dans la gestion des fichiers.
Voici un exemple simplifié:
J'ai 3 fichiers:
main.cpp

Code :
  1. #include <iostream>
  2. #include <stdlib.h>
  3. #include "test.h"
  4. using namespace std;
  5. int main(int argc, char *argv[])
  6. {
  7.   Test<int> a;
  8.   a.brol();
  9.   system("PAUSE" );
  10.   return 0;
  11. }


 
puis test.h
 

Code :
  1. #ifndef _TEST_H
  2. #define _TEST_H
  3. template<class A>
  4. class Test
  5. {
  6.     private:
  7.         A pwet;
  8.     public:
  9.         void brol();
  10. };
  11. #endif


 
puis test.cpp:
 

Code :
  1. #include "test.h"
  2. template<class A>
  3. void Test<A>::brol()
  4. {
  5.     pwet = 0;
  6. }


 
Et j'obtiens a la compil:
 

Compilateur: Default compiler
Building Makefile: "C:\Dev-Cpp\Makefile.win"
Exécution de  make clean
rm -f main.o test.o  Projet1.exe
 
g++.exe -c main.cpp -o main.o  
 
g++.exe -c test.cpp -o test.o  
 
g++.exe main.o test.o  -o "Projet1.exe" -L"C:/map/Dev-Cpp/lib"    
 
main.o(.text+0x1b):main.cpp: undefined reference to `Test<int>::brol(void)'
 
make.exe: *** [Projet1.exe] Error 1
 
Exécution terminée


 
Or, si j'utilise pas de template, ca marche, et si je fais include "test.cpp" dans main.cpp ca marche aussi, comment suis je sensé procédé pour que ca soit valide?
merci d'avance  :jap:


Message édité par Nico5779 le 16-11-2004 à 20:34:46
mood
Publicité
Posté le 16-11-2004 à 20:33:33  profilanswer
 

n°900129
Lam's
Profil: bas.
Posté le 16-11-2004 à 20:41:43  profilanswer
 

Pour l'instant, il faut mettre l'implémentation des fonctions templates dans le .h, pour qu'elle soit visible par le code qui l'utilise en l'instanciant.  
 
Un jour, peut-être, tous les compilos C++ du monde auront des librairies de templates, et on pourra faire du générique comme en ADA...

n°900130
Taz
bisounours-codeur
Posté le 16-11-2004 à 20:42:54  profilanswer
 

_TEST_H
 
 
t'as pas plus unique comme identifiant ?
 
pour les template, il faut utiliser le modèle de l'inclusion. Donc ne fait pas de .cpp associer, fout tout dans le .hpp

n°900131
Lam's
Profil: bas.
Posté le 16-11-2004 à 20:42:59  profilanswer
 
n°900140
Nico5779
Posté le 16-11-2004 à 20:52:04  profilanswer
 

merci pour ce lien Lam's, mais j'ai juste essayer de router "export" devant un template, et ca ma mis :
 
 
test.h:3: warning: keyword 'export' not implemented and will be ignored
 
 
Je suis donc sensé tout mettre dans un seul fichier.
Taz> qd tu dit "modèle de l'inclusion" ca veut dire quoi concretement, je mets pas de directive particulière dans le fichier .hpp et je fais direct le include "test.hpp" dans le main.cpp c bien ca?


Message édité par Nico5779 le 16-11-2004 à 20:52:26
n°900143
Taz
bisounours-codeur
Posté le 16-11-2004 à 20:55:00  profilanswer
 

oui

n°900144
Lam's
Profil: bas.
Posté le 16-11-2004 à 20:55:08  profilanswer
 

Nico5779 a écrit :

test.h:3: warning: keyword 'export' not implemented and will be ignored
 
Je suis donc sensé tout mettre dans un seul fichier.


Bah oui, y a que des grosses boites comme EDG (3 personnes en tout, et le front-end est codé en C) qui peuvent se permettre de passer leur temps à implémenter toute la norme.
 
Le front-end d'EDG est utilisé par le compilateur Comeau, mais aussi par le compilo d'Intel entre autres. Il paraitrait que export serait au programme de l'équipe de Visual C++...

n°900145
Nico5779
Posté le 16-11-2004 à 20:59:58  profilanswer
 

oki merci.
Lams> c pas de bol, je compte n'utiliser que g++ :/

n°900161
Taz
bisounours-codeur
Posté le 16-11-2004 à 21:25:23  profilanswer
 

y a pas de quoi en faire un fromage. g++ fonctionne bien, et export n'est pas essentiel et souvent controversé

n°900225
xterminhat​e
Si vis pacem, para bellum.
Posté le 16-11-2004 à 22:48:58  profilanswer
 

On peut faire #include<test.cpp> également... histoire de conserver ses deux fichiers ?


---------------
Cordialement, Xterm-in'Hate...
mood
Publicité
Posté le 16-11-2004 à 22:48:58  profilanswer
 

n°900250
Taz
bisounours-codeur
Posté le 16-11-2004 à 23:09:05  profilanswer
 

c'est moche. à ce moment là, certains utilise une extension .tpp pour pas prêter à confusion.

n°901695
gaille
Posté le 18-11-2004 à 13:26:39  profilanswer
 

Lam's a écrit :

Pour l'instant, il faut mettre l'implémentation des fonctions templates dans le .h, pour qu'elle soit visible par le code qui l'utilise en l'instanciant.  


 
Ouep c'est ça, pb classique unix...

n°901698
gaille
Posté le 18-11-2004 à 13:28:11  profilanswer
 

xterminhate a écrit :

On peut faire #include<test.cpp> également... histoire de conserver ses deux fichiers ?


 
Oui tout à fait. Moi je bosse sur des applis multi-platforme, et on a des jolis #ifdef pour faire une inclusion conditionnel de l'implémentation des template quand on est sous unix.


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

  [DevC++] problème de compilation avec des templates

 

Sujets relatifs
probleme java et debianProbleme pour renommer une image pendant l'upload.
Probléme de menu en batchprog delphi en service : problème certaines fonctions
Generer du HTML dynamiquement (probleme String) SVP!!!Probleme de formatage d'une base Paradox
Probleme Insertion code stats dans interface htmlAPI Win32 : problème avec le message WM_KEYDOWN
SQL/VBA : probleme avec LIKE et "*" [RESOLU][Java] Encore un problème de JAR...
Plus de sujets relatifs à : [DevC++] problème de compilation avec des templates


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