首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

模板编程 一个链表 求达人求真相求解释解决办法

2012-05-16 
模板编程 一个链表求达人求真相求解释我写了一个模板类,链表三个文件Linklist.hLinklist.cpptest.cppLinkl

模板编程 一个链表 求达人求真相求解释
我写了一个模板类,链表
三个文件
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里看看
我记现在的编译器好像是不执行模板的的声明和实现分离的

热点排行