我正在嘗試編寫一些容器類來實現C++中的主數據結構。頭文件是在這裏:這是什麼錯誤? (爲什麼它不會在其他類中發生?)
#ifndef LINKEDLIST1_H_
#define LINKEDLIST1_H_
#include <iostream>
using namespace std;
template<class T> class LinkedList1;
template<class T> class Node;
template<class T>
class Node
{
friend class LinkedList1<T> ;
public:
Node<T> (const T& value)
{
this->Data = value;
this->Next = NULL;
}
Node<T>()
{
this->Data = NULL;
this->Next = NULL;
}
T Data;
Node* Next;
};
template<class T>
class LinkedList1
{
friend class Node<T> ;
public:
LinkedList1();
// LinkedList1<T>();
~LinkedList1();
// Operations on LinkedList
Node<T>* First();
int Size();
int Count();
bool IsEmpty();
void Prepend(Node<T>* value); //O(1)
void Append(Node<T>* value);
void Append(const T& value);
void Insert(Node<T>* location, Node<T>* value); //O(n)
Node<T>* Pop();
Node<T>* PopF();
Node<T>* Remove(const Node<T>* location);
void Inverse();
void OInsert(Node<T>* value);
// TODO Ordered insertion. implement this: foreach i,j in this; if i=vale: i+=vale, break; else if i<=value<=j: this.insert(j,value),break
void print();
private:
Node<T>* first;
int size;
};
#endif /* LINKEDLIST1_H_ */
當我嘗試在其他類中使用它,比如像這樣:發生
void IDS::craete_list()
{
LinkedList1<int> lst1 = LinkedList1<int>::LinkedList1<int>();
}
此錯誤:
undefined reference to 'LinkedList1<int>::LinkedList1<int>()'
的構造類是公共的,它的頭文件包含在內。我也試圖包含這個類的.cpp文件,但是這沒有幫助。我用完全相同的方式寫了其他類如SparseMatrix和DynamicArray,並且沒有錯誤!...
有您所提供的模板的實際定義是什麼?它們是從模板被調用的地方到達的嗎? (還要注意,語法是錯誤的,變量定義的正確語法是:'LinkedList1 lst1;' - 沒有賦值和對構造函數的顯式調用不正確) –
2010-10-28 08:28:01
一般而言,模板類*必須*整個東西)放入頭文件中,因爲需要* source *來創建不同的實例。 – 2010-10-28 08:28:16
@大衛·羅德里格斯:是的。 – 2010-10-28 08:30:36