[C++] implémentation d'une classe générique (liste chainée)

implémentation d'une classe générique (liste chainée) [C++] - C++ - Programmation

Marsh Posté le 22-12-2003 à 19:52:08    

Bon voilà je voudrais faire une liste chaînée de type FIFO (oui je sais ça existe déjà et c'est la 1000000000ième fois que quelqu'un se lance là dedans mais je dois la faire moi même :( )
 
Donc je voulais faire quelque chose de générique avec l'aide de la STL (bien que je n'y connaisse pas grand chose)
 
donc dans mon .h j'ai mis ça pour l'instant (pas fini):
 

Code :
  1. #include <iostream.h>
  2. #include <stdlib.h>
  3. #include <vector>
  4. template <class Info> class listeFIFO {
  5.     private:
  6.         vector <Info> tab;
  7.         int size;
  8.         int i;
  9.     public:
  10.         void listeFIFO<Info>::ajouterElt(const Info &arg);
  11.         listeFIFO(int taille) {
  12.             size=taille;
  13.             tab=vector <Info>(taille);
  14.             i=0;
  15.         }
  16. };


 
et dans le .CPP:

Code :
  1. template <class Info>
  2. void listeFIFO<Info>::ajouterElt(const Info &arg) {
  3.     if (i>taille) {
  4.        tab[i++]=arg;
  5.     }
  6.     else {
  7.        taille*=2;
  8.        tab[i++]=arg;
  9.     }
  10.     cout<<"Elt ajoute"<<endl;
  11. }


 
mais quand je veux ajouter un élément dans une liste avec un main pas moyen de compiler :(
 
Je mets ça exactement:
 

Code :
  1. listeFIFO<int> a(5); // ça c'est bon
  2. a.ajouterElt(10); // ça ça pose problème


 
Quelqu'un peut m'éclairer? Merci d'avance !

Reply

Marsh Posté le 22-12-2003 à 19:52:08   

Reply

Marsh Posté le 22-12-2003 à 20:41:12    

tu demande un const Info &arg, et tu lui passe un int.  
 
c'est quoi le message d'erreur?

Reply

Marsh Posté le 22-12-2003 à 20:49:39    

Info étant le paramètre-type du modèle, la fonction instanciée a pour proto:
void listeFIFO<int>::ajouterElt(const int& )
 
Je ne sache pas qu'on puisse passer une constante littérale (10) par référence...

Reply

Marsh Posté le 22-12-2003 à 20:50:21    

hum il me mets "instantiated from here"
 
mais en fait justement je veux faire un truc générique, c'est pour ça que j'ai mis un type Info (je voudrais que ça puisse être n'importe quoi, y compris un int)

Reply

Marsh Posté le 22-12-2003 à 20:54:29    

ACut a écrit :

Je ne sache pas qu'on puisse passer une constante littérale (10) par référence...

le compilateur fait une copie
 
 
void listeFIFO<Info>::ajouterElt(const Info &arg);  
 
 
ct'as vu ou ce genre de déclaration toi ?

Reply

Marsh Posté le 22-12-2003 à 21:03:55    

Taz a écrit :

le compilateur fait une copie


Ah ouais c'est fou ça! Sans aucun avertissement?

Reply

Marsh Posté le 22-12-2003 à 21:29:21    

enquoi c'est fou ?

Reply

Marsh Posté le 23-12-2003 à 11:14:25    

taz a écrit :

enquoi c'est fou ?


Eh bien, ça m'épate qu'on puisse transmettre une cte littérale à un f(const int& ). C'est vrai que const fait toute la différence, mais bon, un rien m'émeut. D'ailleurs sans le const, je n'obtiens qu'un modeste avertissement en faisant f(10); sur f(int& i){i=20;}
Je m'attendais à des ennuis plus sérieux... On apprend à toute heure!

Reply

Marsh Posté le 23-12-2003 à 11:16:45    

ben non, c'est juste que t'écris sur un temporaire

Reply

Sujets relatifs:

Leave a Replay

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