c++ 템플릿 클래스 상속시 접근권한 관련 질문입니다.
글쓴이: canuyes / 작성시간: 월, 2014/04/14 - 9:56오후
안녕하세요?
공부하다 궁금한점이 생겨 질문 올립니다.
두 템플릿 클래스 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;
를 생각해내서 작성하긴 했는데
뭐가 맞는것인지 잘 모르겠습니다.
답변 기다립니다. ^^ 좋은 하루되세요
Forums:
http://stackoverflow.com/ques
http://stackoverflow.com/questions/194492/accessing-protected-members-from-subclasses-gcc-vs-msvc
참고하세요
답변감사합니다.
결국 this 포인터를 이용한 접근만 허용한다는 이야기 같은데,
그렇다면 제가 사용한 방법은 오류를 야기할 수 있는 방법인가요?
단지 궁금해서 올려봅니다.
댓글 달기