2014-09-01 89 views
1

我想在派生類構造函數中初始化一個基類的成員。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} {} 
}; 

但是我得到這個:

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} {} 
           ^

爲什麼沒有這可以嗎?

此外,我可以在構造函數體中賦值,但我不能再使用初始化列表。

+1

除了應該使用基類構造函數來初始化基類成員這一事實嗎?如果需要的話,使用'std :: forward'。 – 2014-09-01 14:21:36

回答

1

您不能在派生類構造函數中直接初始化基類成員。 using您試圖使用從受保護的更改訪問到公共,但不會更改此通用規則。創建適當的基類構造函數並將派生類傳遞給它。