다음을 통해 공유


컴파일러 경고(수준 1) C4540

액세스할 수 없거나 모호한 기본 클래스로 변환하기 위해 dynamic_cast를 사용했습니다. 'type1'에서 'type2'(으)로의 런타임 테스트에 실패합니다.

한 형식에서 다른 형식으로 변환하는 데 사용 dynamic_cast 했습니다. 컴파일러는 기본 클래스에 액세스할 수 없거나 모호하기 때문에(private예: 클래스 계층 구조에서 두 번 이상 표시됨) 캐스트가 항상 실패(NULL 반환)할 것이라고 결정했습니다.

다음은 이 경고의 예를 보여줍니다. 클래스 B는 클래스 A에서 파생됩니다. 이 프로그램은 클래스 B(파생 클래스)에서 클래스 A로 캐스팅하는 데 사용합니다dynamic_cast. 이 클래스는 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
}