Aviso do compilador (nível 1) C4540
dynamic_cast usado para converter para base inacessível ou ambígua; o teste de tempo de execução falhará ('type1' para 'type2')
Você usou dynamic_cast
para converter de um tipo a outro. O compilador determinou que a conversão sempre falharia (retornaria NULL) porque uma classe base está inacessível (private
, por exemplo) ou ambígua (aparece mais de uma vez na hierarquia de classe, por exemplo).
É mostrado a seguir um exemplo desse aviso. A classe B é derivada da classe A. O programa usa dynamic_cast
para converter da classe B (a classe derivada) para a classe A, o que sempre falhará, porque a classe B é private
e, portanto, inacessível. Alterar o acesso de A para public
resolverá o aviso.
// 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
}