C++ 模板类子类无法访问父类成员
首先声明问题:模板类子类无法访问父类成员。在实现<<数据结构>>邓俊辉版第四章时,遇到如下代码时,怎样都无法编译通过。
#include"Vector.h" template<typename T> class Stack:public Vector<T> { void push(T const& e) { insert(size(), e); } T pop() { return remove(size() - 1); } T& top() { return (*this)[size() - 1]; } };
提示错误如下:
../include/Stack.h: In member function void Stack<T>::push(const T&): ../include/Stack.h:4:41: error: there are no arguments to size that depend on a template parameter, so a declaration of size must be available [-fpermissive] void push(T const& e) { insert(size(), e); } ^ ../include/Stack.h:4:41: note: (if you use -fpermissive, G++ will accept your code, but allowing the use of an undeclared name is deprecated)
从提示错误中,可以发现Stack类无法访问Vector类的size()。该如何解决这个问题呢?
方法一:添加this->
#include"Vector.h" template<typename T> class Stack:public Vector<T> { void push(T const& e) { this->insert(this->size(), e); } T pop() { return this->remove(this->size() - 1); } T& top() { return (*this)[this->size() - 1]; } };
方法二:添加父类名称Vector<T>::(偷懒ing...
void push(T const& e) { Vector<T>::insert(Vector<T>::size(), e); }
具体参考了下面几篇博客和讨论: