Upozornění kompilátoru (úroveň 1) C4540
dynamic_cast sloužící k převodu na nepřístupnou nebo nejednoznačný základ; Běhový test selže (typ1 na typ2).
Použili dynamic_cast
jste k převodu z jednoho typu na jiný. Kompilátor zjistil, že přetypování vždy selže (vrátí hodnotu NULL), protože základní třída je například nepřístupná (private
například) nebo nejednoznačná (například se v hierarchii tříd zobrazuje více než jednou).
Následuje příklad tohoto upozornění. Třída B je odvozena z třídy A. Program používá dynamic_cast
k přetypování z třídy B (odvozená třída) do třídy A, která vždy selže, protože třída B je private
a proto nepřístupná. Změnou přístupu A public
se upozornění vyřeší.
// 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
}