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

  FORUM HardWare.fr
  Programmation
  C++

  operateur d'affectation

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

operateur d'affectation

n°1765190
katmai
Posté le 26-07-2008 à 12:15:57  profilanswer
 

Salut à tous,
 
j'ai un petit problème de compilation avec mon code :
 

Code :
  1. class Force
  2. {
  3.       public:
  4.       ...
  5.       Force &operator=(const Force &F)
  6.       {
  7.             k=F.k;
  8.             return *this;
  9.       }   
  10. };
  11. main
  12. {
  13.       Force A;
  14.       Force B;
  15.       A=B;               //erreur ici.
  16. };


 
Lors de la compilation j'ai le droit à :
-C:\Documents and Settings\info\Bureau\sources\physic.cpp no match for 'operator=' in 'A = B'
-note C:\Documents and Settings\info\Bureau\sources\physic.h:30 candidates are: Force& Force::operator=(const Force& )
 
Voilà Merci d'avance pour vos réponses A+
 

mood
Publicité
Posté le 26-07-2008 à 12:15:57  profilanswer
 

n°1765197
Gf4x3443
Killing perfection
Posté le 26-07-2008 à 12:59:27  profilanswer
 

Indice: regarder de plus près la ligne pour l(opérateur d'affectation, et essayer d'expliquer comment le compilateur pourrait en tirer la substantifique moelle.
 
Indice 2: l'espace est aussi vital en c++ (début de godwin).

n°1765206
Taz
bisounours-codeur
Posté le 26-07-2008 à 14:09:38  profilanswer
 

c'est quoi ce 'main()' ...
 
donne du code compilable.
 
et vérifie que A = A ne fait rien (if (this != &other) ...)

n°1765226
katmai
Posté le 26-07-2008 à 15:40:02  profilanswer
 

Merci à toi Taz enfaite je crois que j'ai trouvé.
 

Code :
  1. class Force
  2. {
  3.       public:
  4.       ...
  5.       Force &operator=(const Force &F)
  6.       {
  7.             k=F.k;
  8.             return *this;
  9.       } 
  10. };
  11. void Simulation::Ajoute_Force(Force *F);
  12. {
  13.        Force B;
  14.        B=F;
  15. }


 
Le problème se situait au niveau du pointeur. Finalement j'ai remplacé le pointeur par une référence et ça fonctionne.
 
C'est normal que ça fonctionne pas par pointeur?
 
Merci encore A+

n°1765240
Joel F
Real men use unique_ptr
Posté le 26-07-2008 à 17:38:32  profilanswer
 

non, le problème vient du fait que ta classe ne respecte pas la forme canonique de coplien et gère mal sa mémoire. Un membre référence c'est la porte ouverte au coup de kalashnikov dans le genou :o

n°1765251
Un Program​meur
Posté le 26-07-2008 à 18:18:09  profilanswer
 

Taz a écrit :

vérifie que A = A ne fait rien (if (this != &other) ...)


 
Si ce test est nécessaire, ton opérateur d'affectation n'est vraisemblablement pas exception safe.
 

Joel F a écrit :

non, le problème vient du fait que ta classe ne respecte pas la forme canonique de coplien et gère mal sa mémoire. Un membre référence c'est la porte ouverte au coup de kalashnikov dans le genou :o


 
Avec ce qu'il donne, j'ai dû mal à voir comment tu déduis cela; j'ai pas vu la moindre indication sur le type de k.
 

katmai a écrit :

Code :
  1. void Simulation::Ajoute_Force(Force *F);
  2. {
  3.        Force B;
  4.        B=F;
  5. }


 
Le problème se situait au niveau du pointeur. Finalement j'ai remplacé le pointeur par une référence et ça fonctionne.
 
C'est normal que ça fonctionne pas par pointeur?


 
Oui, c'est normal que tu ne puisses pas assigner un pointeur vers la classe à une instance de la classe.

Message cité 2 fois
Message édité par Un Programmeur le 26-07-2008 à 18:46:13
n°1765257
theshockwa​ve
I work at a firm named Koslow
Posté le 26-07-2008 à 18:42:45  profilanswer
 

si ton nouveau code compile, c'est que tu n'as pas surchargé que l'opérateur que tu nous indique ...
Qui plus est, tu n'as pas tenu compte de la remarque de Taz
 
Edit : note pour plus tard, penser à raffraichir la page de temps en temps


Message édité par theshockwave le 26-07-2008 à 18:43:59
n°1765261
Taz
bisounours-codeur
Posté le 26-07-2008 à 19:08:28  profilanswer
 

Un Programmeur a écrit :


 
Si ce test est nécessaire, ton opérateur d'affectation n'est vraisemblablement pas exception safe.
 

moi y en a pas voir le rapport.

n°1765263
Gf4x3443
Killing perfection
Posté le 26-07-2008 à 19:13:07  profilanswer
 

J'imagine qu'il parle des exceptions qu'on pourrait involontairement lever si on ne gère pas l'auto affectation.
 
En même temps, c'est à peu près aussi concis que le premier post, donc bon...

n°1765265
Un Program​meur
Posté le 26-07-2008 à 19:31:20  profilanswer
 

Taz a écrit :

moi y en a pas voir le rapport.


 
http://www.gotw.ca/gotw/011.htm, mais il me semblait que la discussion était plus étendue sur ce point.  Peut-être
est-ce le cas dans le bouquin, mais je ne l'ai pas sous la main.

mood
Publicité
Posté le 26-07-2008 à 19:31:20  profilanswer
 

n°1765272
Taz
bisounours-codeur
Posté le 26-07-2008 à 20:20:38  profilanswer
 

"Short answer: Technically, it's neither necessary nor sufficient. In practice it's probably fine and may even be fixed in the standard."
 
L'argument exception-safe je ne le comprends pas. p1 = p2 c'est exception-safe, mais faire un double delete, ça pose un problème bien différent. D'ailleurs, l'operator= synthétisé par le compilateur pour un POD, il est bien exception-safe, mais il risque de ne pas avoir la bonne sémantique sur des pointeurs.

n°1765277
Joel F
Real men use unique_ptr
Posté le 26-07-2008 à 20:41:54  profilanswer
 

Un Programmeur a écrit :


Avec ce qu'il donne, j'ai dû mal à voir comment tu déduis cela; j'ai pas vu la moindre indication sur le type de k.


 
l'expérience des postes de ce style ou le gugus ne fournit pas les constructeurs/operator= qui vont bien alors que sa classe contient pas que des POD :o


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

  operateur d'affectation

 

Sujets relatifs
MS-DOS : Boucle For, IF et Find imbriqués, probleme d'affectation[C#.NET] Surcharger l'operateur " ++ " pour une hashtable, comment ?
[c++] operateur affectationProblème d'affectation de macro à une feuille excel
[Trouve] Formule auto : affectation valeur cellule en "dur"Problème d'affectation (lib - vc2005)
[Résolu ]Opérateur de comparaison en pythonsurcharge de l'opérateur [][]
[C++] Surchage de l'opérateur []opérateur d'affectation
Plus de sujets relatifs à : operateur d'affectation


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