Scribit Guillaume Morin dies 28/04/2005 hora 23:26: > Tu dois retourner une *référence* sur ton Dice pas un nouvel objet. En > effet, tu vas créer des objets temporaires (un par appel a <<) qui > référencent le même vecteur. Non, car ayant surdéfini l'opérateur =, il n'y a pas de copie superficielle. Néanmoins, merci de la remarque, c'est corrigé. Le problème venait probablement du fait que mon constructeur de recopie ne créait pas le vecteur, en fait. C'est corrigé, et cette partie du code fonctionne désormais, semble-t-il. Par contre, je suis tombé sur troisième bug dans mon code, et je suis effaré que le compilo soit passé outre : template<class T> Dice & operator =(const T &) { m_rollable_scalars->clear(); this->append(value); return *this; } value aurait du être l'identifiant de l'argument, mais j'avais oublié, une fois que j'ai décidé d'en faire une fonction template définie dans le fichier d'en-tête, de le rajouter dans ce qui était le prototype. C'est un bug dans GCC, ou c'est parce que c'était une fonction template ? > Si tu avais conçu ta classe correctement, tu aurais repérer le prb > tout de suite. Les versions de l'opérateur= et du constructeur par > recopie générés par le compilateur ne sont pas correctes pour l'objet > Dice. Tu dois donc les écrire toi même si tu veux autoriser la copie > d'objet Dice. C'était déjà fait. Merci d'avoir pris le temps d'étudier mon problème. Finalement, Nowhere man -- nowhere.man@levallois.eu.org OpenPGP 0xD9D50D8A
Attachment:
signature.asc
Description: Digital signature