Partager via


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 (privatepar 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
}