-1
我想實現C++鏈表,我得到了這個錯誤6次。C++模板錯誤:預期的構造函數,析構函數或類型轉換之前的'<'令牌
上線: 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;
}
你知道這是什麼錯誤信息意味着什麼?以及如何解決它?
非常感謝。
這似乎是我用Java很多..謝謝。至少解決了這個問題。謝謝!附:爲什麼我得到這個錯誤信息?這個消息是什麼意思? – iLoveC
錯誤是因爲它沒有使用模板;並將它用作下一個語句的可能返回類型,因爲它看起來像這樣。 – Julian