'형식 캐스팅' : ...로의 변환이 있지만 액세스할 수 없습니다.
2010. 7. 20. 23:01 in C/C++/에러도우미

CTest* a;
CParent* p = (CParent*)a;
등과 같이 부모클래스로 캐스팅할때..
아래처럼 실수로 쓰지 상속관계를 정의하지 않은 경우에 private으로 자동설정되어 접근할 수 없어 발생하는 에러다. 간단히 상속관계를 public으로 바꿔주면 해결된다.
CTest : CParent
{
};
를..
CTest : public CParent
{
};
로 바꿔주면 된다.
애초에 private 상속은 두가지 규칙을 가진다. 아래는 Effective C++에 나온 부분을 발췌한것.
첫번째로 부모클래스로의 변환불가
두번째로 부모클래스의 멤버들이 자식클래스의 private 멤버가 된다.(출처 Effective C++)
기타..
두번째로 부모클래스의 멤버들이 자식클래스의 private 멤버가 된다.(출처 Effective C++)
기타..
따라서 저런 에러가 발생하는 것이다.
'C/C++ > 에러도우미' 카테고리의 다른 글
기본 클래스를 정의하지 않았습니다. (0) | 2010.06.15 |
---|---|
교차 포함 시 대량의 오류가 발생하는 경우 (3) | 2010.06.13 |
증가연산자 혹은 증감연산자 사용시 주의사항 (0) | 2010.04.26 |
소스 파일이 모듈을 빌드했을 때와 다릅니다. 현재 위치에 사용할 수 있는 소스 코드가 없습니다. (1) | 2010.04.23 |
메모리릭 검출 중에 황당한 오류를 접한 경우 (0) | 2010.04.21 |