我正在尝试编写一些容器类来实现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>()'
该类的构造函数是public,包含其头文件。我也尝试包含该类的.cpp文件,但这没有帮助。我以完全相同的方式写了其他类,如SparseMatrix和DynamicArray,没有错误!...
答案 0 :(得分:4)
很可能那就是你遇到的。
干杯&amp;第h。,
答案 1 :(得分:2)
可以(应该)对您的代码进行许多评论。我还假设没有理由手动实现链表而不是使用STL而不是作业,所以合适的标签会很好。
using namespace
class Node
紧随其后Node<T>
,常规Node
就够了this->
用于数据成员this->Data = NULL;
隐式要求T
是指针。只需Data
默认构建您的代码可能如下所示:
#ifndef LINKEDLIST1_H_
#define LINKEDLIST1_H_
template<class T> class LinkedList1;
template<class T>
class Node
{
friend class LinkedList1<T> ;
public:
Node (const T& value): Data(value), Next(NULL) {}
Node (): Next(NULL) {}
T Data;
Node* Next;
};
答案 2 :(得分:0)
要创建对象,请执行以下操作:
void IDS::craete_list()
{
LinkedList1<int> lst1;
}
对于链接器问题,如果在源(cpp)文件中定义模板类,则需要包含它而不是头文件。