我实现了堆栈数据结构。当我在main函数中调用pop
函数时,出现错误。它是这样的短语:
stack.h:13: error: invalid conversion from 'int' to 'const char*'
stack.h:13: error: initializing argument 1 of 'int remove(const char*)
'
问题是我没有使用char
或char*
类型参数编写remove函数。
所以我希望你们中的任何人都可以帮助我离开这里。谢谢您的帮助!
template <typename T>
class Stack : public Vector<T> {
public:
Stack () { Vector<T>(); }
T pop() { return remove( this->size() - 1 ); } //stack.h:13
};
template <typename T>
class Vector {
protected:
int _size;
int _capacity;
T* _elem;
void shrink();
public:
T remove ( int r );
int remove ( int lo, int hi );
};
template <typename T>
int Vector<T>::remove ( int lo, int hi ) {
if(lo==hi) return 0;
while( hi < _size ) _elem[ lo++ ] = _elem[ hi++ ];
_size = lo;
shrink();
return hi-lo;
}
template <typename T>
T Vector<T>::remove ( int r ) {
T e = _elem[r];
remove ( r, r + 1 );
return e;
}
在主要功能中,
Stack<int> S;
for(i = 0; i<n; i++) {
S.push(i+1);
}
S.pop();
答案 0 :(得分:0)
由于基类Vector<T>
依赖于模板参数,因此具有在实例化模板之前不知道的类型,因此非限定名称查找不会在那里查找。这意味着您对remove
的无限制调用不会解析为基类成员,而是解析为其他一些重载(可能是this one)。
写this->remove
或Vector<T>::remove
表示您指的是会员。