Soucis avec un template...

Soucis avec un template... - C++ - Programmation

Marsh Posté le 13-05-2004 à 22:24:39    

Bonjour ! Vous allez peut-être pouvoir m'aider... J'ai deux classes :
 

Code :
  1. template<typename TYPE> class Template {
  2. public:
  3. TYPE member;
  4. };
  5. class Plop {
  6. public:
  7. Template<Plop> monplop;
  8. };


 
Mon problème est que mon compilateur (MinGW) me crie dessus car je veux utiliser la classe "Plop" pour déclarer le membre "monplop" alors que "Plop" n'est pas encore complètement définie... C'est ma foi très logique mais existe-il un moyen de lui faire accepter cet état de fait ?
Merci d'avance...
 
 
  -- Spotaszn --

Reply

Marsh Posté le 13-05-2004 à 22:24:39   

Reply

Marsh Posté le 13-05-2004 à 22:31:30    

t'es marrant toi, tu lui dis que pour faire un Plop, il te fait un Template (sale nom d'ailleurs) avec un Plop ... en somme qu'un Plop, c'est un Plop, etc ...
 
avec un Template<Plop> *monplop; ou une référence, tu peux faire ce que tu veux, puisque le compilateur sait alors quelle taille allouée pour un plop

Reply

Marsh Posté le 13-05-2004 à 22:38:46    

Merci d'avoir répondu, et c'est vrai qu'après avoir relu cette "version simplifiée" de mon problème, il est évident que je demande de compiler un truc impossible. C'était moins évident lorsque j'ai rencontré ce problème... Tant pis ! C'était pour éviter de passer par un pointeur... M'enfin...
 
 
  -- Spotaszn --

Reply

Marsh Posté le 13-05-2004 à 22:43:20    

tu veux faire quoi ?

Reply

Marsh Posté le 13-05-2004 à 22:49:17    

Code :
  1. template<typename TYPE> class MonTemplate {
  2. public:
  3. struct NODE {
  4.  TYPE element;
  5. };
  6. class Pointeur {
  7.  NODE* ploup;
  8. };
  9. };
  10. class Plop {
  11. public:
  12. MonTemplate<Plop>::Pointeur  monplop;
  13. };


 
Pourquoi ça ne se compile pas, ça ???? :'(
"MonTemplate<Plop>::Pointeur" a une taille parfaitement connue...
 
-- EDIT : y'a une majuscule qui n'apparaît pas... mais elle est bien là, à "Pointeur"...
 
  -- Spotaszn --


Message édité par spotaszn le 13-05-2004 à 22:50:48
Reply

Marsh Posté le 13-05-2004 à 22:55:05    

Bon, MinGW compile... C'est juste VC++6 qui est naze, pour le coup... Grrr !!!!! En plus, je savais que les templates étaient mal supportés...
 
 
  -- Spotaszn --

Reply

Marsh Posté le 13-05-2004 à 22:56:55    

t'es chiant avec tes noms à la con :o tu veux faire quoi ? une liste ?
 
aucun problème chez moi. si tu veux faire une liste (sans utiliser std::list), dis le que je te montre comment on fait en C++, parce que là, t'as une approche C

Reply

Marsh Posté le 13-05-2004 à 22:59:35    

utilise mingw ou crack une version plus récente de VC++

Reply

Marsh Posté le 13-05-2004 à 23:01:33    

Taz a écrit :

t'es chiant avec tes noms à la con :o tu veux faire quoi ? une liste ?
 
aucun problème chez moi. si tu veux faire une liste (sans utiliser std::list), dis le que je te montre comment on fait en C++, parce que là, t'as une approche C


 
En gros, c'est une liste... Ca ressemble à std::list car j'ai pas mal pioché dedans... Et mon "approche C" vient du fait que... que je ne suis pas un intégriste du C++...  :)
 
  -- Spotaszn --

Reply

Marsh Posté le 13-05-2004 à 23:04:02    

ok, comment on fait une liste en C++ ?
 
 

Code :
  1. template<typename T>
  2. class Liste
  3. {
  4.   struct Chainon
  5.   {
  6.     T element;
  7.     Chainon *suivant;
  8.    };
  9.   Chainon *tete;
  10.   public: // à partir d'ici, personne ne doit savoir que Chainon existe
  11. };
  12. //utilisation
  13. Liste<int> l;
  14. l.ajouter(3);

Reply

Marsh Posté le 13-05-2004 à 23:04:02   

Reply

Marsh Posté le 13-05-2004 à 23:05:32    

Code :
  1. class Toto {
  2. std::list<Toto>::iterator it;
  3. };


 
en fait, ça ne passe pas non plus, ça me rassure... :)
 
  -- Spotaszn --

Reply

Marsh Posté le 13-05-2004 à 23:08:01    

En fait, je veux faire une liste d'objets qui contiennent chacun, en plus de que quelques trucs, un "iterator" de cette même liste...
 
  -- Spotaszn --

Reply

Marsh Posté le 13-05-2004 à 23:08:26    

???????

Reply

Marsh Posté le 13-05-2004 à 23:14:06    

Code :
  1. class Toto {
  2.   float                     une_valeur1;
  3.   float                     une_valeur2;
  4.   std::list<Toto>::iterator un_iterator_de_toto;
  5. };
  6. std::list<Toto> maliste_de_toto;


 
Je ne pourrais pas faire plus clair... Et puis comme j'ai dit, c'est juste une faiblesse de VC++6... Dommage pour moi !  :(
 
 
  -- Spotaszn --

Reply

Marsh Posté le 13-05-2004 à 23:16:21    

ben ça marche, mais cai chiatique, vu que tes iterator vont en prendre plein les dents quand tu va modifier maliste_de_toto

Reply

Marsh Posté le 13-05-2004 à 23:19:25    

Taz a écrit :

ben ça marche, mais cai chiatique, vu que tes iterator vont en prendre plein les dents quand tu va modifier maliste_de_toto


 
T'en fais pas pour ça, j'utilise pas les std::list. Mes listes bricolées supportent bien ce "bidouillage"...
Merci pour ton aide... même si j'aurais plutôt besoin d'un vrai compilo ! :)
 
  -- Spotaszn --

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed