次の方法で共有


コンパイラの警告 (レベル 1) C4540

dynamic_cast がアクセスできない、またはあいまいなベースへの変換に使用されています。'type1' から 'type2' の変換でランタイム テストが失敗します

dynamic_cast を使用して、ある型から別の型に変換しました。 コンパイラは、基底クラスにアクセスできない (たとえば、private) か、あいまいである (たとえば、クラス階層に複数回出現するなど) ため、キャストは常に失敗する (NULL を返す) と判断しました。

以下はこの警告の例を示したものです。 クラス 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
}