c++ 템플릿 클래스 상속시 접근권한 관련 질문입니다.

canuyes의 이미지

안녕하세요?
공부하다 궁금한점이 생겨 질문 올립니다.

두 템플릿 클래스 BASE와 DERIVED를 작성하려 서로 상속 시키려 합니다.
코드는 대략 아래와 같습니다.

template<typename T>
class BASE{
	protected:
		T num_parent;
	public:
		BASE(){}
		BASE(T _num)
			:num_parent(_num)
		{}
};
 
template<typename T>
class DERIVED:public BASE<T>{
	public:
		T num_child;
		DERIVED()
			:BASE<int>(10)
		{}
		void func(void){
			//vs2012, linux 모두에서 컴파일 됨.
			cout<<BASE<T>::num_parent<<endl;
			//linux에서는 컴파일 에러
			cout<<num_parent<<endl;
		}
};

궁금한 점은 주석에도 달아 놓았지만, DERIVED class의 func 부분입니다.

cout<<num_parent<<endl;

BASE의 num_parent가 protected이고 public으로 상속했으니,
당연히 접근이 가능하여야 할 것으로 보이는데, 텔넷 접속 환경에서는
"test.cpp:26: error: ‘num_parent’ was not declared in this scope"
컴파일 에러를 내버립니다.

vs2012에선 잘 돌아가고요...

궁여지책으로

cout<<BASE<T>::num_parent<<endl;

를 생각해내서 작성하긴 했는데

뭐가 맞는것인지 잘 모르겠습니다.

답변 기다립니다. ^^ 좋은 하루되세요

klara의 이미지

익명 사용자의 이미지

결국 this 포인터를 이용한 접근만 허용한다는 이야기 같은데,
그렇다면 제가 사용한 방법은 오류를 야기할 수 있는 방법인가요?
단지 궁금해서 올려봅니다.