Freigeben über


Compilerwarnung (Ebene 1) C4540

Der dynamic_cast-Operator wird zur Konvertierung in eine nichtverfügbare oder mehrdeutige Basisklasse verwendet; Beim Laufzeittest werden Fehler auftreten ("type1" in "type2")

Bemerkungen

Sie haben verwendet dynamic_cast , um von einem Typ in einen anderen zu konvertieren. Der Compiler hat festgestellt, dass die Umwandlung immer fehlschlägt (null zurückgeben), da eine Basisklasse (privatez. B. beispielsweise) oder mehrdeutig (z. B. mehr als einmal in der Klassenhierarchie angezeigt wird).

Example

Im Folgenden sehen Sie ein Beispiel für diese Warnung. Klasse B wird von Klasse A abgeleitet. Das Programm verwendetdynamic_cast, um von Klasse B (der abgeleiteten Klasse) in Klasse A zu umwandeln, was immer fehlschlägt, da Klasse B und somit nicht darauf zugegriffen werden private kann. Wenn Sie den Zugriff von A ändern, public um die Warnung zu beheben.

// 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
}