0

C ++リンクリストを実装しようとしていますが、このエラーが6回発生しました。

行: error: expected constructor, destructor, or type conversion before '<' token 5、13、19、26、45、

ヘッダーの13行目:error: expected unqualified-id before 'template'

なぜなのかご存知ですか?

ヘッダ:

#ifndef LINKEDLIST_H
#define LINKEDLIST_H
// includes
#include <iostream>
#include <stdexcept>

template <typename Type> struct Node
{
    Type& data;
    struct Node* next;
}

template <typename Type> class LinkedList
{
private:
    Node* head;
    unsigned length;
public:
    LinkedList();
    virtual ~LinkedList();
    LinkedList(const LinkedList& other);
    LinkedList& add(Type& data);
    Node& operator[](unsigned index);
    friend ostream& operator << (ostream& out, Node& data);
};

#endif // LINKEDLIST_H

ソース:

    #include "../include/LinkedList.h"
using namespace std;

template <typename Type>
LinkedList<Type>::LinkedList<Type>()
{
    head = NULL;
    head->next = NULL;
    length = 0;
}

template <typename Type>
LinkedList<Type>::~LinkedList<Type>()
{
    //dtor
}

template <typename Type>
LinkedList<Type>::LinkedList(const LinkedList& other)
{
    //copy ctor
}


template <typename Type>
LinkedList<Type>& LinkedList<Type>::add(Type& data)
{
    Node<Type>* ptr = head, *last;
    while(ptr)
    {
        last = ptr;
        ptr = ptr->next;
    }
    //   ptr now is null
//    try {ptr = new Node<Type>();}
 //   catch (bad_alloc& e) { cout << "Bad allocation .."; terminate();}
    ptr->data = data;
    ptr->next = NULL;
    last->next = ptr ; // link the previos;
    ++length;
    return *ptr;
}

template <typename Type>
Node<Type>& LinkedList<Type>::operator[] (unsigned index)
{
    if(index < 0 || index >= length) throw std::out_of_range("Out of range exception thrown!");
    Node<Type>* ptr = head;
    for(int i = 0; i < index; ++i) ptr = ptr->next;
    return *ptr;
}

template <typename Type>
std::ostream& operator << (std::ostream& out, Node<Type>& data)
{
    out << data.data << " ";
    return out;
}

このエラーメッセージの意味を知っていますか?そしてそれを修正する方法は?

どうもありがとうございます。

4

1 に答える 1

4

';'をいくつか追加する必要があるようです。あなたの宣言の終わりまで。

template <typename Type> struct Node
{
    Type& data;
    struct Node* next;
}; // <<<
于 2012-10-08T10:16:27.643 に答える