Compartilhar via


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
}