template 사용할 때 identifier is undefined 나오는 이유

luckyhan studio·2021년 5월 18일

c++ template 항상 헤깔리는 것 같다. 이번에 template화된 base class를 상속하는 class를 작성하게 됐는데 identifier is undefined error 가 발생했다. 이유는 dependent names 관련 문서 정보이다.

dependent name 을 간단히 말하면, 템플릿 파라미터에 영향 받는 이름들이다. 예를 들면,

template <typename T>
class Base{
	public:
    	T dependent;
        int nonDependent;
};

위 코드에서 dependent는 dependent name이고 nonDependent는 Non-dependent name이다.

dependent name은 코드가 초기화 되기 전까지 선언과 바인딩 되지 않는다. 간단히 말해 코드를 사용하기 전까지(초기화 되기 전까지) 어떤 타입인지 모른다. 그래서 dependent name에는 명시적으로 scope를 알려줘야 한다.

template <typename T>
class Derived : public Base<T>{
	public:
        void doSomething(){
        	cout << dependent << endl;
        }
};

위 코드를 에러 없이 실행하려면

this->dependent

또는

Base<T>::dependent

위 처럼 scope를 명확히 해줘야 한다.

profile
열심히 사는 그냥 개발자

0개의 댓글