[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

[résolu] Re: [HS] Re: Un bug dans la STL ?



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


Reply to: