C++ 模板类

来源:百度知道 编辑:UC知道 时间:2024/06/03 00:33:42
//文件名:LinkedList.h
template <class T> class LinkedList;
template <class T>
class ListNode
{
private:
ListNode<T>* link;
T data;
public:

ListNode(ListNode<T> *ptrlink = NULL)
{ link = ptrlink; }
};
template<class T>
class LinkedList
{
private:
ListNode<T> *first;
public:
LinkedList() { first = 0; }
~LinkedList();
};
/////////////////////////////////////////
#include <iostream>
int main()
{
LinkedList<int> L1;

return 0;
}
运行出现1>test.obj : error LNK2019: 无法解析的外部符号 "public: __thiscall LinkedList<int>::~LinkedList<int>(void)" (??1?$LinkedList@H@@QAE@XZ),该符号在函数 _main 中被引用
1>D:\Data Structure\test\Debug\test.exe : fatal error LNK1120: 1 个无法解析的外部命令


class LinkedList 类中的

~LinkedList(); 去掉

然后重新编译

输出窗口 正在编译...
myScore.cpp
正在链接...
正在嵌入清单...
结果 生成日志保存在“file://e:\workshop\CPP_work\myTest\myScore\myScore\Debug\BuildLog.htm”
myScore - 0 个错误,0 个警告

是析构函数只有声明没有实现呀,而主函数结束前,要调用这个析构函数呀,所以产生上述链接错误。如下改:

class LinkedList
{
private:
ListNode<T> *first;
public:
LinkedList() { first = 0; }
~LinkedList(){}; // 这样就好了(看见楼上有人说去掉这个,我不是很同意,虽然去掉后编译器会给你添加一个默认的,但还是自己实现析构函数吧,这是好习惯,我们总不能因噎废食吧)
};

这个好像是头文件有错误,贴出头文件看看呢?