0

私は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 から継承する Vector ヘッダー ファイルで、List の純粋仮想メソッドを実装します。List から継承すると、Vector のクラス宣言で「Symbol 'List' could not be resolve」というエラーが発生します。

#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);
};
4

2 に答える 2

0

シンボル 'リスト' を解決できなかったという Google yelds のクイック検索は、コンパイル エラーではありません。(愚かな) Eclipse が相互参照を再構築しようとしています。メニュー コマンド Index->​​Rebuild を試してください。

于 2012-11-05T15:04:57.363 に答える
0

virtual指定子はオーバーロード解決の一部ではありません。それらを使用して関数シグネチャを区別することはできないため、エラー:「オーバーロードできません」。

例えば:

void add(E o);

virtual void add(E o);

どちらも同じ署名を持っていますVector::*(int)。これらは 2 つの異なるオーバーロードではありません。

何をしようとしても、一歩下がって、まず基本的な概念を正しく理解しようとすることをお勧めします。それはあなたに多くの苦痛を与えません。

于 2012-11-05T14:55:15.043 に答える