6

C++、Visual Studio 2010 で単純なテンプレート リストを作成しようとしていますが、エラー C2244 関数定義を既存の宣言と一致させることができません。

「typename」に変更しようとしましたが、役に立ちませんでした。

これは、非常に基本的な機能 (Ctor、Dtor、Add、Delete) を備えた基本的なテンプレート リストです。

助けてください。

#ifndef LIST_H_
#define LIST_H_

template <typename T>
class Node
{
    T* m_data;
    Node* next;
public:
    Node(T*, Node<T>*);
    ~Node();
    void Delete (Node<T>* head);
};

template <typename T>
Node::Node(T* n, Node<T>* head)
{ 
    this->m_data = n;
    this->next=head;
}

template <typename T>
void Node::Delete(Node<T>* head)
{
    while(head)
    {
        delete(head->m_data);
        //head->m_data->~data();
        head=head->next;
    }
}

template <typename T>
class List
{
    Node<T*> head;
public:
    List();
    ~List();
    void addInHead (T*);
};

template <typename T>
void List :: addInHead (T* dat)
{
    head = new Node<T*> (dat,head);
}

template <typename T>
List::List()
{
    head = NULL;
}

template <typename T>
List :: ~List()
{
    head->Delete(head);
}

  #endif

上記のコードがあります。

4

1 に答える 1

11

テンプレート本体の外側にテンプレート関数を実装するための構文が正しくありません。次のようになります。

template <typename T>
Node<T>::Node(T* n, Node<T>* head)
//  ^^^----- You need to add <T> here
{ 
    this->m_data = n;
    this->next=head;
}

のデストラクタの定義も欠落していますNode:

template <typename T>
Node<T>::~Node()
{
    ... // Clean-up code 
}

イデオンへのリンク。

于 2013-01-26T11:13:37.000 に答える