operateur d'affectation - C++ - Programmation
Marsh Posté le 26-07-2008 à 12:59:27
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).
Marsh Posté le 26-07-2008 à 14:09:38
c'est quoi ce 'main()' ...
donne du code compilable.
et vérifie que A = A ne fait rien (if (this != &other) ...)
Marsh Posté le 26-07-2008 à 15:40:02
Merci à toi Taz enfaite je crois que j'ai trouvé.
Code :
|
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+
Marsh Posté le 26-07-2008 à 17:38:32
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
Marsh Posté le 26-07-2008 à 18:18:09
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 |
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 :
|
Oui, c'est normal que tu ne puisses pas assigner un pointeur vers la classe à une instance de la classe.
Marsh Posté le 26-07-2008 à 18:42:45
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
Marsh Posté le 26-07-2008 à 19:08:28
Un Programmeur a écrit : |
moi y en a pas voir le rapport.
Marsh Posté le 26-07-2008 à 19:13:07
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...
Marsh Posté le 26-07-2008 à 19:31:20
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.
Marsh Posté le 26-07-2008 à 20:20:38
"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.
Marsh Posté le 26-07-2008 à 20:41:54
Un Programmeur a écrit : |
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
Marsh Posté le 26-07-2008 à 12:15:57
Salut à tous,
j'ai un petit problème de compilation avec mon code :
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+