模板编程 一个链表 求达人求真相求解释
我写了一个模板类,链表
三个文件
Linklist.h
Linklist.cpp
test.cpp
Linklist.h
#pragma once
#define NULL 0
template <typename Datatype>
class CLinklist
{
public:
CLinklist(void);
~CLinklist(void);
public:
struct Node
{
Datatype *Data;
Node *Next;
};
int add(Datatype data,int index);//将data插在第num个位置上
int del(int index);
Node* Head;
int getlength();
Node* getelement(int index);
private:
int Length;
};
Linklist.cpp
#include "Linklist.h"
template <typename Datatype>
CLinklist<typename Datatype>::CLinklist()
{
Length = 0;
Head = new Node();
Head->Data = NULL;
Head->Next = NULL;
}
template <typename Datatype>
CLinklist<typename Datatype>::~CLinklist()
{
}
template <typename Datatype>
int CLinklist<Datatype>::add(Datatype data,int index)
//前插
{
if (index<0&&index>Length+1)
return 5;
Node *DATA = new Node();
Node *temp,*tar;
temp = Head;
tar = temp->Next;
for(int i=0;i<index-1;i++)
{
temp = temp->Next;
tar = temp->Next;
}
DATA->Data = &data;
DATA->Next = tar;
temp->Next = DATA;
Length++;
return 0;
}
template <typename Datatype>
int CLinklist<typename Datatype>::del(int index)
{
if(index<=0)
return 5;
//编号需大于0
Node *temp,*tar;
temp = Head;
tar = temp->Next;
for(int i = 0;i<index;i++)
{
temp->Next = tar->Next;
delete(tar);
}
Length--;
return 0;
}
template <typename Datatype>
int CLinklist<typename Datatype>::getlength()
{
return Length;
}
template <typename Datatype>
typename CLinklist<typename Datatype>::Node* CLinklist<typename Datatype>::getelement(int index)
{
Node *temp = Head;
for(int i=0;i<index;i++)
{
temp=temp->Next;
}
return temp;
}
test.cpp
#include <string>
#include "Linklist.h"
int main()
{
CLinklist<int> *list = new CLinklist<int>();
list->add(21,1);
list->add(22,2);
list->del(3);
list->del(1);
return 0;
}
出错信息 : 1>------ 已启动生成: 项目: ttset, 配置: Debug Win32 ------
1>正在编译...
1>Linklist.cpp
1>正在链接...
1>test.obj : error LNK2019: 无法解析的外部符号 "public: int __thiscall CLinklist<int>::del(int)" (?del@?$CLinklist@H@@QAEHH@Z),该符号在函数 _main 中被引用
1>test.obj : error LNK2019: 无法解析的外部符号 "public: int __thiscall CLinklist<int>::add(int,int)" (?add@?$CLinklist@H@@QAEHHH@Z),该符号在函数 _main 中被引用
1>test.obj : error LNK2019: 无法解析的外部符号 "public: __thiscall CLinklist<int>::CLinklist<int>(void)" (??0?$CLinklist@H@@QAE@XZ),该符号在函数 _main 中被引用
1>F:\test\ttset\Debug\ttset.exe : fatal error LNK1120: 3 个无法解析的外部命令
1>生成日志保存在“file://f:\test\ttset\ttset\Debug\BuildLog.htm”
1>ttset - 4 个错误,0 个警告
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========
到底是怎么回事。。。。?奇怪了 改了半天就是改不好,是程序的问题还是编译的问题 我的环境是vs2008
[解决办法]
模板类的定义和实现貌似是要放到一个文件里的
[解决办法]
模板不支持分离编译。所有的定义和实现都在一个文件里面。
[解决办法]
你吧实现放到.h里看看
我记现在的编译器好像是不执行模板的的声明和实现分离的