나는 컴파일되지 않습니다 다음 코드 예제가 있습니다 GCC 인쇄는 것을개인 상속 : 이름 조회 오류
가#include <stdio.h>
namespace my
{
class base1
{ // line 6
};
class base2: private base1
{
};
class derived: private base2
{
public:
// The following function just wants to print a pointer, nothing else!
void print(base1* pointer) {printf("%p\n", pointer);}
};
}
오류 : 이제
test.cpp:6: error: `class my::base1' is inaccessible
test.cpp:17: error: within this context
을, 어떻게 문제를 추측 할 수 : print
의 선언을 보면 컴파일러는 base1
을보고 다음과 같이 생각합니다. base1
은 derived* this
의 기본 클래스 하위 객체이지만 액세스 할 수는 없습니다. 그 동안 base1
은 형식 이름이어야합니다.
어떻게하면 C++ 표준에서 이것이 올바른 동작이며 컴파일러의 버그가 아니라는 것을 알 수 있습니까? (나는 모든 컴파일러가 제대로 작동했는지 확인했습니다.)
이 오류는 어떻게 해결해야합니까? 다음 수정 프로그램이 모두 작동하지만 어느 것을 선택해야합니까?
void print(class base1* pointer) {}
void print(::my:: base1* pointer) {}
class base1; void print(base1* pointer) {}
편집 :
이int main()
{
my::base1 object1;
my::derived object3;
object3.print(&object1);
}
당신이 주를 게시 할 수()? –
개인 상속이 구성과 전혀 다른 것을 보여주는 좋은 예입니다! – curiousguy