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 (private
ad 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
}