Udostępnij przez


Ostrzeżenie kompilatora (poziom 1) C4540

dynamic_cast używane do konwersji na niedostępną lub niejednoznaczną bazę; Test czasu wykonywania zakończy się niepowodzeniem (typ1" do "type2")

Uwagi

Użyto dynamic_cast konwersji z jednego typu na inny. Kompilator ustalił, że rzutowanie zawsze zakończy się niepowodzeniem (zwraca wartość NULL), ponieważ klasa bazowa jest niedostępna (na przykład) lub niejednoznaczna (privatepojawia się więcej niż raz w hierarchii klas).

Example

Poniżej przedstawiono przykład tego ostrzeżenia. Klasa B pochodzi z klasy A. Program używa dynamic_cast do rzutowania z klasy B (klasy pochodnej) do klasy A, która zawsze zakończy się niepowodzeniem, ponieważ klasa B jest private i tym samym niedostępna. Zmiana dostępu do elementu A spowoduje public rozwiązanie ostrzeżenia.

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