error: invalid conversion from 'int' to 'const char*'
error: invalid conversion from 'int' to 'const char*'
我正在实现堆栈数据结构。当我在 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*
类型参数编写删除函数。
所以我希望你们中的任何一个能帮助我离开这里。谢谢您的帮助!
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();
由于基础 class Vector<T>
取决于模板参数,因此在模板实例化之前有一个未知的类型,因此不查找非限定名称查找。这意味着您对 remove
的非限定调用不会解析为 base-class 成员,而是解析为其他一些重载(可能是 this one)。
写 this->remove
或 Vector<T>::remove
以表明您指的是成员。
我正在实现堆栈数据结构。当我在 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*
类型参数编写删除函数。
所以我希望你们中的任何一个能帮助我离开这里。谢谢您的帮助!
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();
由于基础 class Vector<T>
取决于模板参数,因此在模板实例化之前有一个未知的类型,因此不查找非限定名称查找。这意味着您对 remove
的非限定调用不会解析为 base-class 成员,而是解析为其他一些重载(可能是 this one)。
写 this->remove
或 Vector<T>::remove
以表明您指的是成员。