클래스 A가 클래스 B를 친구로 선언하는 코드는 다음과 같습니다. 클래스 B 내에서 선언 된 클래스 C가 클래스 A의 private 선언/멤버를 볼 수 있어야합니까?클래스의 "friend"는 해당 클래스에서 선언 된 클래스로 확장됩니까?
CL 버전 16 (Visual Studio 2010)에서는 오류없이 컴파일되지만 gcc g ++ 버전 4.1.1에서는 "typedef int A :: T가이 컨텍스트 내에서 private 임"오류를 제공합니다.
함수가 typedef로 호출 할 때도 동일한 동작이 발생합니다 (차이점을 발견 한 방식입니다).
class A {
friend class B;
typedef int T;
};
class B {
A::T t; // ok
typedef A::T U; // ok
class C {
U u; // ok
A::T v; // compile error on gcc
};
};
간략하게 검색했지만 올바른 검색어를 찾을 수 없었습니다. 나는이 표준을 아직 읽지 않았다. 주제에 대해 이전에 질문이 있거나 C++ FAQ에 언급되어 있습니까? 다음 중 어느 경우에도 표준에 따라 어떤 동작이 적용됩니까? 표준 문서에서
http://stackoverflow.com/questions/3584385/friend-access-to-protected-nested-class를 참조하십시오. –
이 코드는 잘 형성되어 있습니다. gcc 4.5.1 및 comau online에서 컴파일됩니다. –
Prasoon : 허. 내 gcc가 오래되었지만 새로 설치해야하는 이유가 궁금합니다. 오 잘. 고맙습니다! –