0

関数の 1 つでコンパイラ エラーが発生し続けます。

LinkedList.hpp:81: error: `template<class T> class LinkedList' used without template parameters
LinkedList.hpp:81: error: expected constructor, destructor, or type conversion before '*' token
LinkedList.hpp:81: error: expected `;' before '*' token

しかし問題は、コンストラクタ、デストラクタ、および型変換があることです。実装が間違っていると確信しています

// This is the function i keep on getting an error for
template <class T>
ListNode* LinkedList<T>::find(int pos)//Finds the position of an item
{
    if(pos < 1)
        return NULL; //If pos is less than one then find returns NULL because pos is a illegal value.
    else
    {
        ListNode *temp = head;
        for(int i = 1; i < pos; i++)
            temp = temp -> next;
        return temp;
    } 
}

//The class 
template <class T>
class LinkedList : public ABCList<T> {
private:
    //T    a [LIST_MAX];

    struct ListNode
    {
        T data; // List item
        ListNode *next; //Pointer to next node
    };

    int  size;
    ListNode *head;
    ListNode *find(int pos);

public:
    LinkedList();
    LinkedList(LinkedList &other);
    ~LinkedList();
    virtual bool isEmpty () = 0;
    virtual int  getLength () = 0;
    virtual void insert (int pos, T item) = 0;
    virtual T    remove (int pos) = 0;
    virtual T    retrieve (int pos) = 0;
};
4

2 に答える 2

2
  1. 標準ライブラリがリンク リストを提供しているのに、リンク リストを作成するのはなぜですか? std::list二重連結リストです。
  2. 定義ListNode*に書き直せますtypename LinkedList<T>::ListNode*find()
  3. ユーザーが を操作できるようにするかListNode(この場合は public として宣言する必要があります)、それを実装の一部にするか (その場合は何らかのイテレーターを作成する必要があるかもしれません) を選択する必要があります。 )。

私はまだ同じエラーが発生しました

質問に示されているように、定義はクラスfind()の宣言の上にありLinkedListましたか? その場合は、それらを交換する必要があります。

于 2012-10-08T01:37:30.757 に答える
1

私が見ていることの1つは、ListNodeがLinkedListで定義されているため、そのように修飾する必要があるということです:

template <class T>
typename LinkedList<T>::ListNode* LinkedList<T>::find(int pos) {
    ...
}
于 2012-10-08T01:38:39.000 に答える