Partager via


Avertissement du compilateur C5243

« type » : l’utilisation de la classe incomplète « nom-classe » peut provoquer une violation ODR en raison d’une limitation ABI. Vous pouvez contourner le problème en spécifiant le mot clé d’héritage sur la déclaration de transfert de la classe.

Notes

L’ABI Microsoft C++ utilise plusieurs types de pointeur vers membre. Ces types ont des tailles différentes qui dépendent du modèle d’héritage utilisé par la classe. La norme C++ vous permet de déclarer qu’un pointeur vers membre est du type de classe incomplète. Si vous déclarez une variable de type pointeur vers membre comme étant de classe incomplète, le compilateur doit utiliser la représentation la plus générale. Cela peut entraîner une violation ODR (règle de définition), car le compilateur peut utiliser une représentation plus petite et plus spécifique pour ce type de pointeur vers membre dans d’autres unités de traduction où le type de classe est complété.

Pour résoudre cette erreur, vous pouvez spécifier le type de classe complété avant de déclarer la variable pointeur vers membre. Vous pouvez également utiliser un mot clé d’héritage spécifique à Microsoft pour préciser le modèle d’héritage correct sur la déclaration de classe de transfert incomplète.

L’avertissement du compilateur C5243 est nouveau dans Visual Studio 2019 version 16.10 et est désactivé par défaut. Pour plus d’informations sur l’activation de cet avertissement, consultez Avertissements du compilateur désactivés par défaut.

Voir aussi

Mots clé d’héritage