[Résolu]pb compilation operator ++

pb compilation operator ++ [Résolu] - C++ - Programmation

Marsh Posté le 07-09-2009 à 14:27:14    

Bonjour,
J'ai écrit une classe dans laquelle j'ai redéfini l'opérateur ++ comme suit :

Code :
  1. void bit_array::operator ++ (){
  2. for(int i=0; i<dim; i++) tab[i] = 1;
  3. }


Cette méthode est censé mettre tous les bits de mon tableau à 1. La compilation sous forme de module se passe bien et j'obtiens mon fichier .o
Voilà le soucis : je fais fichier qui contient mon main() et j'écrit :

Code :
  1. bit_array a(10); // 10 c'est la taille du tableau
  2. a++;


A la compilation, voilà l'erreur qu'il me met :  
error : no operator++(int) declared for postfix ++ trying prefix operator instead
 
A bientôt,
Amadeh.

Message cité 1 fois
Message édité par amadeh le 09-09-2009 à 16:26:28
Reply

Marsh Posté le 07-09-2009 à 14:27:14   

Reply

Marsh Posté le 07-09-2009 à 15:14:00    

amadeh a écrit :

Bonjour,
J'ai écrit une classe dans laquelle j'ai redéfini l'opérateur ++ comme suit :

Code :
  1. void bit_array::operator ++ (){
  2. for(int i=0; i<dim; i++) tab[i] = 1;
  3. }


Cette méthode est censé mettre tous les bits de mon tableau à 1. La compilation sous forme de module se passe bien et j'obtiens mon fichier .o
Voilà le soucis : je fais fichier qui contient mon main() et j'écrit :

Code :
  1. bit_array a(10); // 10 c'est la taille du tableau
  2. a++;


A la compilation, voilà l'erreur qu'il me met :  
error : no operator++(int) declared for postfix ++ trying prefix operator instead
 
A bientôt,
Amadeh.


 
tu as défini uniquement l'opérateur d'incrémentation préfixé ( ++a ) et non pas celui postfixé ( a++ )
 
pour définir le post fixé, il faut que ta fonction soit comme suit :

Code :
  1. const bit_array& bit_array::operator ++ (int){
  2.   for(int i=0; i<dim; i++) tab[i] = 1;
  3.   return *this;
  4. }


 
 
Edit : rajout du type de retour standard pour cet opérateur. Attention, trop changer la sémantique d'un opérateur n'est pas forcément une bonne chose.

Message cité 1 fois
Message édité par theshockwave le 08-09-2009 à 10:34:14

---------------
last.fm
Reply

Marsh Posté le 07-09-2009 à 18:29:19    

Merci pour cette réponse rapide.
Amadeh.

Reply

Marsh Posté le 07-09-2009 à 23:37:28    

theshockwave a écrit :


 
Edit : rajout du type de retour standard pour cet opérateur. Attention, trop changer la sémantique d'un opérateur n'est pas forcément une bonne chose.


 
C'est pas du tout le type de retour standard. Et avec ce type d'implémentation, on a tout sauf un comportement standard.

Reply

Marsh Posté le 08-09-2009 à 00:36:18    

Canoniquement:
 

Code :
  1. X operator++(int)
  2. {
  3.    X old(*this);
  4.    ++*this;
  5.    return old;
  6. }

Reply

Marsh Posté le 08-09-2009 à 09:55:30    

Taz a écrit :

Canoniquement:
 

Code :
  1. X operator++(int)
  2. {
  3.    X old(*this);
  4.    ++*this;
  5.    return old;
  6. }



 
ouais, enfin, partant de ce qu'il voulait faire, c'était difficile de reconverger vers ca.


---------------
last.fm
Reply

Marsh Posté le 08-09-2009 à 13:55:25    

theshockwave a écrit :


 
ouais, enfin, partant de ce qu'il voulait faire, c'était difficile de reconverger vers ca.


Pas du tout, c'est d'ailleurs pour ça que c'est une forme canonique: elle est indépendante de la sémantique de ++() mais conserve la sémantique correcte de ++(int).

Reply

Sujets relatifs:

Leave a Replay

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