Sdílet prostřednictvím


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á (privatenapří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
}