컴파일러 경고(수준 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
}