接口实现抛出预期的类名错误

时间:2019-01-22 18:28:08

标签: c++ c++11 templates

我正在尝试实现一个从抽象类型继承的List继承的数据结构。我正在遵循《 C ++之旅》一书中的指南。 不幸的是,我的代码没有编译,我遇到了类似的问题,但是问题有所不同,我只使用一个.cc文件,没有标题,没有任何东西,只是一个简单的测试。

编辑List<T>就像我从类模板继承的那样。


template <class T>
class List {

public:
    virtual int size()=0;
    virtual T get(int)=0;
    virtual void set(int,T)=0;
    virtual void add(T)=0;
    virtual void remove(int)=0;
};


template<class T>
class ArrayStack : public List {

    public:

        ArrayStack(){
            len = 0;
        }

        void add(T e){
            a.push_back(e);
            len++;
        }
        T get(int idx){
            return a[idx];
        }
        void set(int idx,T e){
            a[idx] = e;
        }
        int size(){
            return len;
        }

        void remove(int idx){
            a.erase(a.begin()+idx);
        }
        ~ArrayStack(){}

    private:
        std::vector<T> a;
        int len;
};


template <class T>
void print_list(List<T>& l){
    for(auto i=0;i < l.size();i++){
        std::cout << l.get(i) << std::endl;
    }
}


int main(){

    ArrayStack<int> m;
    m.add(1);
    m.add(2);
    m.add(3);

    print_list(m);

}

编译错误:

list.cc:28:32: error: expected class-name before ‘{’ token
 class ArrayStack : public List {

1 个答案:

答案 0 :(得分:0)

基础必须始终是类。 List不是课程。这是一个类模板。无法从模板继承。

类模板的实例,例如List<T>。我怀疑您可能打算以此为基础。