2016-10-23 6 views
0

単体リンクリストを使用するプログラムのヘッダーファイルがあります。元々ノードに格納されていたデータは整数でしたが、テンプレートクラスを使用しようとすると、NodeクラスとAnyListクラスをテンプレートクラスに変換しようとしました。しかし、私がコンパイルすると、 "ノード":クラステンプレートの使用にはテンプレート引数リストが必要です "というエラーメッセージが表示されます。テンプレートクラスの例を見ましたが、2つを作ろうとしているので混乱があります1つのヘッダファイルでテンプレートクラス。"クラステンプレートの使用にはテンプレート引数リストが必要"と複数のクラスがあります

#ifndef ANYLIST_H 
#define ANYLIST_H 

#include<iostream> 
#include <string>   
using namespace std; 

template <typename T> 
class Node 
{ 
public: 
    Node() : data(0), next(NULL) {} 
    Node(T& theData, Node *newNext) : data(theData), next(newNext){} 
    Node* getNext() const { return next; } 
    T getData() const { return data; } 
    void setData(T& theData) { data = theData; } 
    void setNext(Node *newNext) { next = newNext; } 
    ~Node(){} 
private: 
    T data;  
    Node *next; //pointer that points to next node 
}; 

template <typename T> 
class AnyList 
{ 
    friend ostream& operator<<(ostream& out, const AnyList<T>& theList); 

public: 
    AnyList(); 

    void insert(const T& elem); 

    int getNumOfElem() const; 

    void destroyList(); 

    ~AnyList(); 

private: 
    Node *first; 
    int count;  
}; 

#endif 
+0

これらの例では、テンプレートの実装が完全にヘッダーファイル内に存在する必要があることにも言及していますか? – StoryTeller

答えて

0

簡単に言えば、Node<>List<>が異なるテンプレートです。あなたはListからNodeにテンプレートパラメータを転送する必要があるので。

Node *first; 
を交換してください

Node<T> *first; 
+0

ありがとう!私はそれが私の問題の一つだと思った。私はこれを試して、ノードオブジェクトを作成する関数で、自分の.cppファイル内の行にエラーが発生することになります。同じエラーが表示されます。 –

+0

テンプレート 空隙AnyList ::インサート(CONST T&ELEM) {\t \tノードnewNode =新しいノード(ELEM、nullptr)。 \t if(first == nullptr) \t \t first = newNode; \t else \t { \t \t Node * temp = first; \t \tしばらく(temp-> getNextを()= nullptr!) \t \t \t TEMP = temp-> getNextを(); \t \t temp-> setNext(newNode); \t} \t ++ count; } –

+0

@JamieVuテンプレート実装をcppファイルに入れることはできません。ヘッダーにすべてを入れる必要があります。 – StoryTeller

関連する問題