共用方式為


編譯器警告 (層級 1) C4540

使用了 dynamic_cast 轉換為不可存取或模擬兩可的基底;執行階段測試將會失敗 (由 'type1' 轉換為 'type2')

您用來 dynamic_cast 從某個類型轉換成另一種類型。 編譯程式判斷轉換一律會失敗(傳回 NULL),因為基類無法存取(例如)或模棱兩可(private例如,在類別階層中出現多次)。

以下顯示這個警告的範例。 類別 B 衍生自類別 A。程式會使用 dynamic_cast 從類別 B (衍生類別)轉換成類別 A,這一律會失敗,因為類別 Bprivate ,因此無法存取。 將 A存取權變更為 public 將會解決警告。

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