Une erreur avec des templates

Une erreur avec des templates - C++ - Programmation

Marsh Posté le 13-09-2004 à 17:59:52    

Bonjour,  
 
J'ai un problèe avec le code suivant à la compilation (pour info j'utilise dev-C++)
 

Code :
  1. #ifndef __GKFIFO_HPP__
  2. #define __GKFIFO_HPP__
  3. #ifdef __GCC__
  4. #define GKFIFOCLASS Gkfifo<T,FIFO_SIZE>
  5. #else
  6. #define GKFIFOCLASS Gkfifo
  7. #endif
  8. template <class T, int FIFO_SIZE>
  9. GKFIFOCLASS::Gkfifo(void)            //ligne 165  
  10. {
  11. init();
  12. }


 
J'obtient l'erreur suivante à la ligne 165:
 syntax error before `::' token  
 
J'avoue que j'ai du mal à comprendre. QQun aurait-il des idées ?

Reply

Marsh Posté le 13-09-2004 à 17:59:52   

Reply

Marsh Posté le 13-09-2004 à 18:30:45    

et elle est ou ta classe :o ?
 
 
et y a pas de ifdef GCC qui tienne .... et ton (void) il veut rien dire

Reply

Marsh Posté le 13-09-2004 à 18:39:05    

Taz a écrit :

et elle est ou ta classe :o ?
 
 
et y a pas de ifdef GCC qui tienne .... et ton (void) il veut rien dire


 
J'aurais pas cru que ce soit possible avec Taz, mais (*snif*) :
 
+1
 

Reply

Marsh Posté le 13-09-2004 à 19:13:06    

qu'est-ce que j'ai dit ?

Reply

Marsh Posté le 13-09-2004 à 23:14:24    

Taz a écrit :

qu'est-ce que j'ai dit ?


Après relecture, je pense qu'il ne s'attendait pas à acquisser à un de tes posts.
 
M'enfin t'as rien dit de mal ni de contraire, hein.


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
Reply

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

non, j'ai juste dit que c'est y a pas de spécifité à gcc, y a que des défaillances d'autres compilateurs. et que (void) n'a pas de sens

Reply

Marsh Posté le 13-09-2004 à 23:50:30    

Et bon le gars il nous poste un morceau de code qui compile pas, puis il se casse. Doit être parti pisser pour un long, long moment.


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
Reply

Marsh Posté le 14-09-2004 à 11:12:47    

Je suis là mais bon laissez moi le temps de voir le truc.

Reply

Marsh Posté le 14-09-2004 à 11:13:49    

et je n'ai pas voulu vous copier tout le code, la class est bien déclarée.

Reply

Marsh Posté le 14-09-2004 à 11:17:49    

si vous voulez une bonne partie du code, le voici :

Code :
  1. #ifndef __GKFIFO_HPP__
  2. #define __GKFIFO_HPP__
  3. #ifdef __gcc__
  4. //#define GKFIFOCLASS Gkfifo<T,FIFO_SIZE>
  5. #else
  6. #define GKFIFOCLASS Gkfifo
  7. #endif
  8. // classe à transformer en template
  9. // pour se débarrasser du pramamètre taille (FIFO_SIZE)
  10. #include "gkfilter.hpp"
  11.  
  12. // template<> class Gkfilter<class T>;
  13. template <class T, int FIFO_SIZE> class Gkfifo
  14. {
  15. public:
  16. Gkfifo();
  17. void init(void);
  18. // supprimer l'ensemble des éléments pour lesquels le filtre répond oui
  19. void remove(class Gkfilter<T> & f)
  20.  {
  21. ...  // je vous épargne un bout de code
  22. template <class T, int FIFO_SIZE>
  23. GKFIFOCLASS::Gkfifo(void)
  24. {
  25. init();
  26. }


 
Le void, je pense que ce n'est pas ça qui bloque la compilation (en fait, j'en suis sur). Enfin c'est un source que l'on m'a donné (qui est censé se compiler) et il faut que je le reprenne donc c'est assez difficile pour moi de me mettre dedans.
 
sircam
ça fait du bien de temps en temps de se soulager un peu !


Message édité par cakeman le 14-09-2004 à 11:20:05
Reply

Marsh Posté le 14-09-2004 à 11:17:49   

Reply

Marsh Posté le 14-09-2004 à 11:24:58    

Ouais, bah:
 

Code :
  1. template <class T, int FIFO_SIZE> 
  2. Gkfifo<T, FIFO_SIZE>::Gkfifo()
  3. {
  4.      init();
  5. }


 
Ca compile pas ? (et enlève le #ifdef... )

Reply

Marsh Posté le 14-09-2004 à 11:28:09    

déjà le machin pour gcc, tu devrais l'enlever
 
Gkfifo<T,FIFO_SIZE>::Gkfifo  est l'expression correcte
 
ensuite tes (void) ils ont la meme signidication que ()
 
quand à ton constructeur ... inline le ! défini le dans le corps de ta classe.
 
et passe int FIFO_SIZE en unsigned pour éviter des surprises

Reply

Marsh Posté le 14-09-2004 à 16:37:11    

Maintenant j'ai d'autres problèmes mais celui là semble résolu. Merci pour votre aide et je reviendrai avec plaisir si j'ai d'autres problèmes ;)

Reply

Sujets relatifs:

Leave a Replay

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