문제

class A {
    public:
            int a;
};

class B: private A {
};

class C: public A {
};

class D: public B, public C {
        D() {
                B::a = 0;
        }
};
.

B는 비공식적으로 A를 삭제하지만 C의 D 's의 상속을 제거하면 컴파일러는 내가 기대하는 것처럼 컴파일러가 액세스 할 수 없다고합니다.그래서 C 혼란스러운 내 컴파일러의 상속은 무엇입니까?

컴파일러는 gcc 4.4.7

입니다.

도움이 되었습니까?

해결책

표준이

에 그러한 액세스를 허용하지 않기 때문에 정품 컴파일러 버그처럼 보입니다.

11.2 기본 클래스 및 기본 클래스 멤버의 접근성

표준 자체 외부의 증거를 찾고있는 Whozcraig는 이미 그럴듯이 그러한 접근을 허용하지 않는다고 해당합니다.

GCC에서 혼동 될 수있는 유사한 패턴을 찾으려면 대부분의 액세스의 경로가 보호하는 보호가 적용되는 경로를 결정하므로 가상 기본 클래스 A가 가상 기본 클래스 A가 허용 될 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top