你需要:
templateclass Array { protected : T* data; int size; }; template class Stack : protected Array { int top; public: Stack(){}; public: // void Push(T x) {data[++top] = x;} <-- Won't compile void Push(T x) {this->data[++top] = x;} // <-- Will compile // void Push(T x) {Array ::data[++top] = x;} <-- Will also compile };
因为在从类模板派生的类模板的实现中,必须通过this指针或基类限定引用基本模板的成员.
你需要:
templateclass Array { protected : T* data; int size; }; template class Stack : protected Array { int top; public: Stack(){}; public: // void Push(T x) {data[++top] = x;} <-- Won't compile void Push(T x) {this->data[++top] = x;} // <-- Will compile // void Push(T x) {Array ::data[++top] = x;} <-- Will also compile };
因为在从类模板派生的类模板的实现中,必须通过this指针或基类限定引用基本模板的成员.