2014-09-01 4 views
1

파생 클래스 생성자 내부에서 기본 클래스의 멤버를 초기화하려고합니다.C++ 템플릿 및 파생 클래스 멤버 초기화

error: 'using BaseClass<T, 3>::values' is not a non-static data member of 'DerivedClass<T>' 
    DerivedClass(T a, T b, T c) : values{a, b, c} {} 
           ^

왜이 허용되지 않습니다 :

template <typename T, int D> 
class BaseClass { 
    // ... 
protected: 
    T values[D]; 
}; 

template<typename T> 
class DerivedClass : public BaseClass<T, 3> { 
public: 
    using BaseClass<T, 3>::values; 

    DerivedClass(T a, T b, T c) : values{a, b, c} {} 
}; 

그러나 나는이 얻을?

또한 생성자 본문에 값을 할당 할 수 있지만 초기화 목록을 더 이상 사용할 수 없습니다.

+1

기본 클래스 멤버를 초기화하는 데 기본 클래스 생성자를 사용해야한다는 사실 외에도? 필요한 경우'std :: forward'를 사용하십시오. –

답변

1

파생 클래스 생성자에서 기본 클래스 멤버를 직접 초기화 할 수 없습니다. using 변경 내용을 보호 대상에서 공용으로 변경하려고 시도했지만이 일반 규칙은 변경되지 않습니다. 적절한 기본 클래스 생성자를 만들고 파생 클래스의 초기화 메서드를 전달합니다.

관련 문제