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

  FORUM HardWare.fr
  Programmation
  C++

  erreur de spécialisation d'un template ...

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

erreur de spécialisation d'un template ...

n°1288527
fdgrt
Posté le 20-01-2006 à 18:17:49  profilanswer
 

Bonjour à tous,
 
Je travail sous XCODE v2.2 (OS X 10.4.4) et Visual C++ v6 (Windows XP SP2)
 
Sous XCODE, le compilateur me donne l'erreur suivante  : "error: specialization of 'template<class_Tp> struct std::greater' in different namespace" / le Visual est lui beaucoup plus "permissif" ;-)
 
Le code est le suivant : j'effectue un tri avec l'utilisation de list::sort(x) ou 'x' est une fonction de comparaison de type std::greater() qui me permet de comparer un membre de type std::string contenu dans mes instances de classe.
 
La voici :
 

Code :
  1. template <> struct std::greater<CMyClass *>
  2. {
  3. bool operator()(const CMyClass *poA, const CMyClass *poB) const
  4. {
  5.  return (poA && poB) ? (poA->m_oText.compare(poB->m_oText) <= 0 ? true : false) : false;
  6. }
  7. };


 
J'ai du mal à comprendre l'erreur donnée par le compilateur. Quelqu'un a-t-il déjà été confronté à ce type de problème et comment le résoudre ?
 
Merci d'avance pour vos réponses.

mood
Publicité
Posté le 20-01-2006 à 18:17:49  profilanswer
 

n°1288540
fra0
Posté le 20-01-2006 à 18:40:56  profilanswer
 

je n'ai jamais été confronté au problème
mais l'erreur semble assez claire
 

Code :
  1. namespace std
  2. {
  3.     template<> struct greater<CMyClass*> : public binary_function<CMyClass*, CMyClass*, bool>
  4.     {
  5.      bool operator()(const CMyClass* x, const CMyClass* y) const
  6.      {
  7.       //blah
  8.      }
  9.     };
  10. }


 
il me semble aussi que Visual 2005 est beaucoup moins permissif que g++ 3.4.2 par exemple

n°1288544
++fab
victime du syndrome IH
Posté le 20-01-2006 à 18:55:58  profilanswer
 


Code :
  1. namespace std
  2. {
  3.     //...
  4. }


Illégal. Tu peux avoir de sacrés blagues avec ça ...
 

fra0 a écrit :

il me semble aussi que Visual 2005 est beaucoup moins permissif que g++ 3.4.2 par exemple


gni ???

n°1288564
fra0
Posté le 20-01-2006 à 19:20:49  profilanswer
 

intéressant, d'après ta théorie les headers standard  sont "illégaux" ?

n°1288570
++fab
victime du syndrome IH
Posté le 20-01-2006 à 19:26:10  profilanswer
 

ma théorie ?

n°1288571
fra0
Posté le 20-01-2006 à 19:28:12  profilanswer
 

ton assertion si tu préfères

n°1288576
++fab
victime du syndrome IH
Posté le 20-01-2006 à 19:31:36  profilanswer
 

et bien simplement "écrire" dans le namespace std est réservé à l'implémentation.

n°1288578
fra0
Posté le 20-01-2006 à 19:32:55  profilanswer
 

et qu'est-ce que notre ami essaie de faire à ton avis ?

n°1288583
++fab
victime du syndrome IH
Posté le 20-01-2006 à 19:42:04  profilanswer
 

il essaye de se retenir d'écrire dans le namespace std peut-etre ?

n°1288588
fra0
Posté le 20-01-2006 à 19:52:17  profilanswer
 

dans ce cas il ne devrait pas se retenir de déclarer cette fonction en tant que membre de CMyClass
ou de CMyClassComparator

mood
Publicité
Posté le 20-01-2006 à 19:52:17  profilanswer
 

n°1288639
Taz
bisounours-codeur
Posté le 20-01-2006 à 21:13:59  profilanswer
 

Code :
  1. #include <algorithm>
  2. #include <iostream>
  3. namespace My {
  4.   struct Class {
  5.     int i;
  6.   };
  7.   std::ostream & operator<<(std::ostream &os, const Class &c)
  8.   {
  9.     return os << c.i;
  10.   }
  11.   struct ClassPointerGreater : std::greater<Class*> {
  12.     bool operator()(const Class *x, const Class *y) const
  13.     {
  14.       return x->i < y->i;
  15.     }
  16.   };
  17. }
  18. int main()
  19. {
  20.   using namespace My;
  21.   Class a, b, c;
  22.   Class* foo[] = { &a, &b, &c};
  23.   for (unsigned i = 0; i < 3; ++i)
  24.     std::cout << *(foo[i]) << ',';
  25.   std::cout << '\n';
  26.   std::sort(foo, foo + 3, ClassPointerGreater());
  27.   for (unsigned i = 0; i < 3; ++i)
  28.     std::cout << *(foo[i]) << ',';
  29.   std::cout << '\n';
  30. }

avec une daube comme ça ?


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

  erreur de spécialisation d'un template ...

 

Sujets relatifs
Besoin d'aide, erreur php.erreur dans script d'activation de liens
Erreur de requete et formulaire[RESOLU]erreur a l'affichage de mes pages?????
odbc access ds excel erreur de spécification !!![Perl] Erreur non-lvalue subroutine
[resolu] [perl] problème "lib text::template" suite migration serverUtilisation template
Gestion d'ERREUR(Resolu)Specialisation de template et erreur de link... [presque resolu]
Plus de sujets relatifs à : erreur de spécialisation d'un template ...


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