我正在尝试编写一些容器类来实现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