【问题标题】:error: invalid conversion from 'int' to 'const char*'错误:从 'int' 到 'const char*' 的无效转换
【发布时间】:2015-01-09 08:49:24
【问题描述】:

我正在实现一个堆栈数据结构。当我在main函数中调用pop函数时,出现了错误。它的短语是这样的:

  1. stack.h:13: error: invalid conversion from 'int' to 'const char*'
  2. stack.h:13: error: initializing argument 1 of 'int remove(const char*)

'

问题是我没有使用charchar* 类型参数编写删除函数。 所以我希望你们中的任何人都可以帮助我离开这里。谢谢您的帮助!

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();

【问题讨论】:

  • 有时你不得不思考为什么人们发明了换行符。
  • stack.h 的第 13 行是哪一行?
  • 发布的代码无法编译,没有定义向量。
  • @ST3 我已经修改了代码

标签: c++ data-structures


【解决方案1】:

由于基类Vector&lt;T&gt; 依赖于模板参数,因此在模板实例化之前不知道类型,因此不存在非限定名称查找。这意味着您对remove 的无限制调用不会解析为基类成员,而是解析为其他一些重载(可能是this one)。

this-&gt;removeVector&lt;T&gt;::remove 表明您指的是成员。

【讨论】:

  • 太好了!谢谢!当我调用“size”函数时也出现了类似的问题,但错误的措辞不同,所以我认为“pop”函数是一个完全不同的问题。再次感谢您的注意!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-26
  • 1970-01-01
  • 2018-03-24
  • 1970-01-01
相关资源
最近更新 更多