E2305 Impossible de trouver 'class::class' ('class' &) pour copier un vecteur OU Impossible de trouver 'class'::operator=('class'&) pour copier un vecteur (C++)

De RAD Studio
Aller à : navigation, rechercher

Remonter à Erreurs et avertissements du compilateur (C++) - Index

Lorsque la classe C++ 'classe1' contient un vecteur (un tableau) de classe 'classe2' et que vous souhaitez générer un objet de type 'classe1' à partir d'un autre objet de type 'classe 1', vous devez utiliser ce constructeur :

classe2::classe2(classe2&)

pour que les éléments du vecteur puissent être générés.

Le constructeur, appelé constructeur de copie, n'accepte qu'un paramètre (une référence à sa classe).

En règle générale, le compilateur fournit automatiquement un constructeur de copie.

Cependant, si vous avez défini un constructeur pour 'classe2' ayant un paramètre de type 'classe2&' et d'autres paramètres avec des valeurs par défaut, le constructeur de copie ne peut exister, ni être créé par le compilateur.

Ceci car ces deux instructions ne peuvent pas être différenciées :

classe2::classe2(classe2&)
classe2::classe2(classe2&, int = 1)

Vous devez redéfinir ce constructeur de telle façon que tous les paramètres n'aient pas de valeur par défaut.

Vous pouvez alors définir un constructeur de référence ou laisser le compilateur en créer un.

Message "Impossible de trouver class::operator= ..."

Lorsqu'une classe C++ 'classe1' contient un vecteur (un tableau) de classe 'classe2' et que vous souhaitez copier une classe de type 'classe1', vous devez utiliser cet opérateur d'affectation :

classe2::classe2(classe2&)

pour que les éléments du vecteur puissent être copiés.

En règle générale, le compilateur fournit automatiquement cet opérateur.

Cependant, si vous avez défini un opérateur= pour la 'classe2' qui n'accepte pas de paramètre de type 'classe2&,' le compilateur ne le fournira pas automatiquement ; c'est vous qui devez le fournir.