在c ++中继承模板类错误

时间:2012-11-05 14:42:14

标签: c++ templates inheritance

我是c ++的新手。我收到错误“符号'列表'无法解决” 我正在研究eclipse,我无法弄清楚问题是什么......

List.h这里是父类的声明,它是一个泛型类,即Vector 将继承

#ifndef LIST_H_
#define LIST_H_

template <class E> class List {
protected:
    int size;

public:
    virtual ~List();
    virtual void add(E o) = 0;
    virtual E get(int index) = 0;
    int getSize();
};

template <class E> List<E>::~List() {
}

template <class E> int List<E>::getSize() {
    return size;
}

#endif /* LIST_H_ */

Vector.h矢量头文件,它继承自List,它将实现List的纯虚方法 我得到错误,当我从List继承,在Vector的类声明中,“符号'列表'无法解析”

#include "List.h"
template <class E> class Vector: public List<E>{
private:
    class Node {
    public:
        E value;
        Node* next;
        Node(E value): value(value), next(0) {}
    };

    typedef Node* PNode;
    PNode first;

public:
    Vector();
    virtual ~Vector();
    void add(E o);
    E get(int index);
    virtual void add(E o);
    virtual E get(int index);
};

2 个答案:

答案 0 :(得分:0)

virtual说明符不是重载解析的一部分。您无法使用它们来区分功能签名,从而导致错误:“无法重载”。

例如:

void add(E o);

virtual void add(E o);

都具有相同的签名Vector::*(int)。它们不是两种不同的重载。

无论你想做什么,我建议退一步,先尝试先掌握基本概念。它会为你带来很多痛苦。

答案 1 :(得分:0)

快速搜索google yelds 符号'列表'无法解析不是编译错误,它是(愚蠢的)eclipse正在尝试为您重建交叉引用。尝试菜单命令Index-&gt; Rebuild。