错误:从'int'到'const char *'的转换无效

时间:2015-01-09 08:49:25

标签: c++ data-structures

我实现了堆栈数据结构。当我在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*)
  3. '

    问题是我没有使用charchar*类型参数编写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();
    

1 个答案:

答案 0 :(得分:0)

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

this->removeVector<T>::remove表示您指的是会员。