Bagikan melalui


Compiler Warning (level 1) C4540

dynamic_cast digunakan untuk mengonversi ke dasar yang tidak dapat diakses atau ambigu; pengujian run-time akan gagal ('type1' ke 'type2')

Anda digunakan dynamic_cast untuk mengonversi dari satu jenis ke jenis lainnya. Pengompilasi menentukan bahwa pemeran akan selalu gagal (mengembalikan NULL) karena kelas dasar tidak dapat diakses (private, misalnya) atau ambigu (muncul lebih dari sekali dalam hierarki kelas, misalnya).

Berikut ini menunjukkan contoh peringatan ini. Kelas B berasal dari kelas A. Program ini menggunakan dynamic_cast untuk melemparkan dari kelas B (kelas turunan) ke kelas A, yang akan selalu gagal karena kelas Bprivate dan dengan demikian tidak dapat diakses. Mengubah akses A untuk public menyelesaikan peringatan.

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