首先说一下,本人要做一个简单的链表,然后用到了模板类,但是在编译的时候报错,原因是匹配不到函数,具体代码如下,还有其他的函数也是相同的问题。
拜托各位路过的高手提点一下。
头文件SLList.h
拜托各位路过的高手提点一下。
头文件SLList.h
#ifndef SLLIST_H_INCLUDED
#define SLLIST_H_INCLUDED
#include <iostream>
using namespace std;
template<class T>
struct SLNode
{
T data;
SLNode<T> *next;
SLNode(SLNode * nextNode=NULL){next=nextNode;}
SLNode(const T& item,SLNode *nextNode=NULL)
{
data=item;next=nextNode;
}
};
template<class T>
class SLList
{
private:
SLNode<T> *head;
SLNode<T> *tail;
SLNode<T> *currptr;
int size;
public:
SLList();
SLIist(T& item);
~SLList();
bool IsEmpty(void)const{return head->next==NULL;}
};
#endif // SLLIST_H_INCLUDED
SLList.cpp
#include "SLList.h"
template<class T>
SLList<T>::SLList()
{
head=tail=currptr=new SLNode<T>();
size=0;
}
template<class T>
SLList<T>::SLList(T& item)
{
tail=currptr=new SLNode<T>(item);
head=new SLNode<T>(currptr);
size=1;
}
template<class T>
SLList<T>::~SLList()
{
while(!IsEmpty())
{
currptr=head->next;
head->next=currptr->next;
delete currptr;
}
delete head;
}
main.cpp
#include <iostream>
using namespace std;
#include "SLList.h"
int main()
{
SLList<int> sl(1);
}
这个问题解决了,本人想其他的函数也应该是一样的近似解决。
解决方案
15
SLList.cpp 里除了 #include 行其它复制到 SLList.h 文件里,然后把 cpp 删掉。
当你开始使用模板时,就不要想着声明与定义分离了。
当你开始使用模板时,就不要想着声明与定义分离了。
50
模板不支持分离编译,把声明和实现放到同一个文件里
原因参看:http://www.2cto.com/kf/201404/294104.html
原因参看:http://www.2cto.com/kf/201404/294104.html