我在访问模板类的模板子类中的受保护成员时遇到问题。
问题是,如果我删除模板,则一切正常。我知道如何通过为每个单个派生类简单地编写“使用Base :: my_protected_member”来丑陋地解决问题。但是,为什么我首先需要这样做?
这是一个最少的评论示例
template<class T>
class Base
{
protected:
T x;
public:
Base(T x) : x(x) {}
};
template<class T>
class Derived : public Base<T>
{
//using Base<T>::x; //why ?!
public:
Derived(T x);
void print();
};
template<class T>
Derived<T>::Derived(T x) : Base<T>(x)
{ cout << x << endl; } //works fine
template<class T>
void Derived<T>::print() { cout << x << endl; } //doesn't work
int main()
{
Derived<int> d(4);
d.print();
}
我不太了解发生了什么,或者如何很好地解决此问题。可能我做错了事...