編譯器警告 (層級 1) C4540
使用了 dynamic_cast 轉換為不可存取或模擬兩可的基底;執行階段測試將會失敗 (由 'type1' 轉換為 'type2')
您用來 dynamic_cast
從某個類型轉換成另一種類型。 編譯程式判斷轉換一律會失敗(傳回 NULL),因為基類無法存取(例如)或模棱兩可(private
例如,在類別階層中出現多次)。
以下顯示這個警告的範例。 類別 B 衍生自類別 A。程式會使用 dynamic_cast
從類別 B (衍生類別)轉換成類別 A,這一律會失敗,因為類別 B 是 private
,因此無法存取。 將 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
}