Avviso del compilatore (livello 1) C4540

dynamic_cast utilizzato per la conversione in una base inaccessibile o ambigua; Il test in fase di esecuzione avrà esito negativo ('type1' a 'type2')

È stato usato dynamic_cast per eseguire la conversione da un tipo a un altro. Il compilatore ha determinato che il cast ha sempre esito negativo (restituisce NULL) perché una classe di base è inaccessibile (privatead esempio) o ambigua (appare più volte nella gerarchia di classi, ad esempio).

Di seguito è riportato un esempio di questo avviso. La classe B è derivata dalla classe A. Il programma usa dynamic_cast per eseguire il cast dalla classe B (la classe derivata) alla classe A, che avrà sempre esito negativo perché la classe B è private e pertanto inaccessibile. La modifica dell'accesso di A in public risolverà l'avviso.

// 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
}