Avertissement du compilateur (niveau 1) C4540
dynamic_cast utilisé pour convertir en base inaccessible ou ambiguë ; Le test d’exécution échoue ('type1' à 'type2')
Vous avez utilisé dynamic_cast
pour convertir d’un type à un autre. Le compilateur a déterminé que le cast échouerait toujours (retourner NULL), car une classe de base est inaccessible (private
par exemple) ou ambiguë (apparaît plusieurs fois dans la hiérarchie de classes, par exemple).
L’exemple suivant illustre cet avertissement. La classe B est dérivée de la classe A. Le programme utilise dynamic_cast
pour effectuer un cast de la classe B (la classe dérivée) en classe A, ce qui échouera toujours, car la classe B est private
et donc inaccessible. La modification de l’accès d’A pour public
résoudre l’avertissement.
// C4540.cpp
// compile with: /W1
struct A {
virtual void g() {}
};
struct B : private A {
virtual void g() {}
};
int main() {
B b;
A * ap = dynamic_cast<A*>(&b); // C4540
}