[c++] Bool operator <

Bool operator < [c++] - C++ - Programmation

Marsh Posté le 02-06-2005 à 16:21:13    

:hello:
 
J'ai un petit problème de compréhension avec cette surcharge :
 
Ma 1e classe :
enreg.h

Code :
  1. bool operator  < (const enreg &e1, const enreg &e2)
  2. {
  3.      return(e1.GetHeure() < e2.GetHeure());   
  4. }


 
GetHeure retourne un objet du type heureRDV.
 
2e classe :
heure.h

Code :
  1. bool operator < (const heureRDV h1, const heureRDV h2)
  2. {
  3.      return( (h1.GetHeure() < h2.GetHeure()) && (h1.GetMinutes()<h2.GetMinutes()));
  4. }


 
Getheure() retourne un objet de type unsigned int, getminutes aussi.
 
Erreur à la compilation :

Didier@didier-principal /home/lab4
$ g++ -o main main.C
In file included from main.C:3:
heure.h: In function `bool operator<(heureRDV, heureRDV)':
heure.h:54: error: passing `const heureRDV' as `this' argument of `unsigned int
 
   heureRDV::GetHeure()' discards qualifiers
heure.h:54: error: passing `const heureRDV' as `this' argument of `unsigned int
 
   heureRDV::GetHeure()' discards qualifiers
heure.h:54: error: passing `const heureRDV' as `this' argument of `unsigned int
 
   heureRDV::GetMinutes()' discards qualifiers
heure.h:54: error: passing `const heureRDV' as `this' argument of `unsigned int
 
   heureRDV::GetMinutes()' discards qualifiers
In file included from main.C:4:
enreg.h: In function `bool operator<(const enreg&, const enreg& )':
enreg.h:133: error: passing `const enreg' as `this' argument of `heureRDV
   enreg::GetHeure()' discards qualifiers
enreg.h:133: error: passing `const enreg' as `this' argument of `heureRDV
   enreg::GetHeure()' discards qualifiers
 
Didier@didier-principal /home/lab4
$


---------------
.
Reply

Marsh Posté le 02-06-2005 à 16:21:13   

Reply

Marsh Posté le 02-06-2005 à 16:24:16    

t'as du oublié le const dans ta def de GetHeure()
enfin c'ets pas facile a dire, les messages de gcc etant un peu cryptique, la

Reply

Marsh Posté le 02-06-2005 à 16:26:07    

surement oui et dans getMinutes() aussi
 
edit: je t'ai vu  :D


Message édité par push le 02-06-2005 à 16:28:05
Reply

Marsh Posté le 02-06-2005 à 16:28:17    

chrisbk a écrit :

t'as du oublié le const dans ta def de GetHeure()
enfin c'ets pas facile a dire, les messages de gcc etant un peu cryptique, la


 
mettre  
 

Code :
  1. unsigned int GetMinutes() const
  2.     {
  3.         return minute;
  4.     };


 
PArce que je vient d'essayer, et ca ne va pas :(


Message édité par didier1809 le 02-06-2005 à 16:28:38

---------------
.
Reply

Marsh Posté le 02-06-2005 à 16:29:28    

pas getMinute, getHeure
 

Reply

Marsh Posté le 02-06-2005 à 16:31:38    

chrisbk a écrit :

pas getMinute, getHeure


STFU NOOB

Reply

Marsh Posté le 02-06-2005 à 16:32:40    

chrisbk a écrit :

pas getMinute, getHeure


 
Je l'ai fait pour tous  :o
 

Code :
  1. heureRDV GetHeure() const
  2. {
  3.  return heure;
  4. };


Message édité par didier1809 le 02-06-2005 à 16:33:03

---------------
.
Reply

Marsh Posté le 02-06-2005 à 16:32:40    


 
FOAD BITCH

Reply

Marsh Posté le 02-06-2005 à 16:33:12    


FUCKING MORON

Reply

Marsh Posté le 02-06-2005 à 16:33:15    

didier1809 a écrit :

Je l'ai fait pour tous  :o


 
bin soit t'attends qu'un champollion en herbe passe venir decrypter le truc produit par gcc soit tu nous faxe un peu plus de code, genre les .h

Reply

Marsh Posté le 02-06-2005 à 16:33:15   

Reply

Marsh Posté le 02-06-2005 à 16:34:06    

push a écrit :

FUCKING MORON


 
ILL INVOKE TEH MODERATION WRATH UPON YOU SHITHEAD

Reply

Marsh Posté le 02-06-2005 à 16:36:53    

chrisbk a écrit :

bin soit t'attends qu'un champollion en herbe passe venir decrypter le truc produit par gcc soit tu nous faxe un peu plus de code, genre les .h


 
Je voulait pas encombrer inutilement, donc voila les h:
 
heure.h

Code :
  1. #include "includes.h"
  2. using namespace std;
  3. class heureRDV
  4. {
  5. private:
  6. unsigned int heure;
  7. unsigned int minute;
  8. public:
  9.  heureRDV()
  10.  {  };
  11.  ~heureRDV()
  12.  {  };
  13. void encode(int heure2,int minute2)
  14. {
  15.  heure = heure2;
  16.  minute = minute2;
  17. };
  18. unsigned int GetHeure() const
  19. {
  20.         return heure;
  21.     };
  22.    
  23.     unsigned int GetMinutes() const
  24.     {
  25.         return minute;
  26.     };
  27.    
  28.     void setheure(unsigned int heurein)
  29.     {
  30.          heure = heurein;
  31.     };
  32.    
  33.     void setminutes(unsigned int min)
  34.     {
  35.          minute = min;
  36.     }; 
  37. };
  38. //Surcharge de << pour afficher une heure
  39. //est utilisé pour ecrire dans le fichier, l'espace sert
  40. //de séparateur
  41. ostream& operator <<(ostream &os, heureRDV heure)
  42. {
  43.         os<<heure.GetHeure()<<" "<<heure.GetMinutes();
  44.         return os;
  45. };
  46. bool operator < (const heureRDV h1, const heureRDV h2)
  47. {
  48.      return( (h1.GetHeure() < h2.GetHeure()) && (h1.GetMinutes()<h2.GetMinutes()));
  49. }


 
 
enreg.h

Code :
  1. #include "includes.h"
  2. using namespace std;
  3. class enreg
  4. {
  5.   private:
  6.   class date Date1;
  7.   heureRDV heure;
  8.   string type;
  9.   string titre;
  10.   public:
  11.    list<string> PtrTexte;
  12.   public:
  13.     enreg()
  14.     {
  15.  type = " ";
  16.  titre = " ";
  17.  heure.encode(0,0);
  18.  Date1.setDate(2005,01,01);
  19.     };
  20.    
  21.     ~enreg()
  22.     {    };
  23. date GetDate()
  24. {
  25.  return Date1;
  26. };
  27. heureRDV GetHeure() const
  28. {
  29.  return heure;
  30. };
  31. string GetType() const
  32. {
  33.  return type;
  34. };
  35. string GetTitre() const
  36. {
  37.  return titre;
  38. };
  39.    
  40.     //Affiche un enregistrement à l'ecran
  41.     void affichePtr()
  42.     {
  43.      cout<<"Date : "<<Date1.GetJour()<<"/"<<Date1.GetMois()<<"/"<<Date1.GetAnnee()<<endl;
  44.  cout<<"Heure : "<<heure.GetHeure()<<":"<<heure.GetMinutes()<<"\nType : "<<type<<"\nTitre : "<<titre<<endl;
  45.  list<string>::iterator iter = PtrTexte.begin();
  46.  cout<<"Texte : "<<endl;
  47.  unsigned int taille = PtrTexte.size();
  48.  for(unsigned int i = 0; i < taille; i++)
  49.  {
  50.  cout<< *iter <<endl;
  51.  iter++;
  52.  }
  53.     };
  54.    
  55.     void encode_enreg(date mydate, string mtype, heureRDV mheure, string mtitre)
  56.     {
  57.  Date1 = mydate;
  58.  heure = mheure;
  59.  type = mtype;
  60.  titre = mtitre;
  61.     };
  62.     void encode_ligne()
  63.     {   
  64. string a, b;
  65. PtrTexte.erase(PtrTexte.begin(),PtrTexte.end());
  66. int cpt=0,ind;
  67. cin>>a;
  68. ind=a.size();
  69.         //Découpe la ligne en plusieurs ligne de 64char
  70.      while (ind-cpt*64 > 0)
  71.      {
  72.   b="";
  73.  for(unsigned int i=0; (i<64)&&(i<ind-cpt*64); i++)
  74.   b+=a[i+cpt*64];
  75.      cpt++;
  76.         PtrTexte.push_back(b);
  77.      };
  78.     };
  79. };
  80. //Permet de lire un enrgistrement (utilisé lors de la lecture du fichier)
  81. istream& operator >>(istream &is, enreg &enr)
  82. {
  83. date date_main;
  84. unsigned int num,aaaa,mm,jj;
  85. heureRDV mheure;
  86. unsigned int heure,min;
  87. string mtype;
  88. string mtitre;
  89. string donnee;
  90.    
  91. is>>jj;
  92. is>>mm;
  93. is>>aaaa;
  94. date_main.setDate(aaaa,mm,jj);
  95. num = date_main.numberOfDay();
  96. is>>heure;
  97. is>>min;
  98. mheure.encode(heure,min);
  99. is>>mtitre;
  100. is>>mtype;
  101. enr.encode_enreg(date_main,mtype,mheure,mtitre);
  102. is>>donnee;
  103. enr.PtrTexte.push_back(donnee);
  104. while( donnee.size() != 0 && donnee != "#" )
  105. {
  106.  if(donnee.size() != 0 && donnee != "#" )
  107.  {
  108.   is>>donnee;
  109.   if (donnee != "#" )
  110.    enr.PtrTexte.push_back(donnee);
  111.  }
  112. }
  113. return is;
  114. };
  115. bool operator  < (const enreg &e1, const enreg &e2)
  116. {
  117.      return(e1.GetHeure() < e2.GetHeure());   
  118. }


---------------
.
Reply

Marsh Posté le 02-06-2005 à 17:00:39    

Je crois que je sais, gros boulet que je suis ça m'était arrivé  :D  
 
Dégages ces 2 fonctions de ton header ça n'a rien à faire là, ça doit être mis dans un cpp.
En gros arrêtes de tout foutre dans tes header comme ça et sépare ton code.
 
ostream& operator <<(ostream &os, heureRDV heure)
bool operator < (const heureRDV h1, const heureRDV h2)


Message édité par push le 02-06-2005 à 17:01:07
Reply

Marsh Posté le 02-06-2005 à 17:29:00    

push a écrit :

Je crois que je sais, gros boulet que je suis ça m'était arrivé  :D  
 
Dégages ces 2 fonctions de ton header ça n'a rien à faire là, ça doit être mis dans un cpp.
En gros arrêtes de tout foutre dans tes header comme ça et sépare ton code.
 
ostream& operator <<(ostream &os, heureRDV heure)
bool operator < (const heureRDV h1, const heureRDV h2)


 
 :D , j'avoue, j'avais pas envie de devoir faire un makefile ou de taper tout les noms de fichiers  ...  :ange:  
 
Merci, je teste ca :)


---------------
.
Reply

Sujets relatifs:

Leave a Replay

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