泛型模版类出现了LNK2019: 无法解析的外部符号错误

我们在写程序的大部分时间都不会去考虑在已有的知识上出现的匮乏,前两天用C++写了一个顺序表,结果却不尽人意,这个或许是因为人生就是这样,在你已知的知识当中出现的知识漏洞你会很难发现,这里还是感谢一下syc大哥,每次在VC驿站上发帖子,他都给我回复了,也就是syc让我更加的喜欢VC驿站。

行了,谈谈出现的错误

这里是我之前出错的代码

http://www.cctry.com/thread-256893-1-1.html

这里我放上了我成功后的代码

SeqList.h

#include<iostream>
#include<stdio.h>
//默认的顺序表大小
const int defaultsize= 10;
//类
template<typename DateType>
class SeqList
{
public:
	SeqList(int size = defaultsize)
	{
		//判断对应的顺序表长度
		if (size > 0)
		{
			maxSize = size;
			//数据数组
			eml = new DateType[size];
		}
	}
	//析构函数
	~SeqList()
	{
		//申请的数组不为空时进行释放
		if (eml != NULL)
		{
			delete []eml;
			eml = NULL;
		}
	}
	int getLength()
	{
		return curLength;
	}
	//插入
	bool insertElem(DateType e);
	//删除
	bool delElem(int index);
	//查找
	DateType findElem(int index);
	//更改
	bool changeElem(int index, DateType e);
private:
	DateType *eml;
	int maxSize;
	int curLength;
};
//插入
template<class DateType>
bool SeqList<DateType>::insertElem(DateType e)
{
	if (curLength < maxSize)
	{
		eml[curLength] = e;
		curLength++;
		return true;
	}
	std::cout << "insertElem function the Array is full" << std::endl;
	return false;
}
//删除
template<class DateType>
bool SeqList<DateType>::delElem(int index)
{
	if (curLength > index && index >= 0)
	{
		for (int i = index; i < curLength; i++)
		{
			eml[i] = eml[i + 1];
		}
		curLength--;
		return true;
	}
	std::cout << "delElem function wrong index" << std::endl;
	return false;

}

//查找
template<class DateType>
DateType SeqList<DateType>::findElem(int index)
{
	if (index < 0 && index >= curLength)
	{
		std::cout << "findElem function wrong index" << std::endl;
		return NULL;
	}
	return eml[index];
}
//更改
template<class DateType>
bool SeqList<DateType>::changeElem(int index, DateType e)
{
	if (index >= 0 && index < curLength)
	{
		eml[index] = e;
		return true;
	}
	std::cout << "changElem function wrong index" << std::endl;
	return false;
}

测试体

#include "SeqList.h"
#include <iostream>
//success in day 09-01
//模版类的声明和实现必须写在同一个头文件中,否则就无法找到类中对应的函数
int main()
{
	//使用泛型类,并调用构造函数
	SeqList<int> list(10);
	//插入值
	for (int i = 0; i < 10; i++)
	{
		list.insertElem(i);
	}
	//显示值
	for (int i = 0; i < list.getLength(); i++)
	{
		std::cout << list.findElem(i) << std::endl;
	}
	//更改值
	list.changeElem(3, 5);
	list.delElem(4);
	//显示值
	for (int i = 0; i < list.getLength(); i++)
	{
		std::cout << list.findElem(i) << std::endl;
	}
	char a[10];
	std::cin >> a;

}

这里也就是说出现了一个小小的问题,就是模版类的定义和实现体一般要卸载同一个头文件中。

下面来源于网上:

在C++标准中没有明确规定,模版类的定义和实现体必须放置到同一个文件中,因为模版类是在预编译期间进行,如果写在两个文件中,增加了编译器的实现难度,所以大多数编译器一般都将模版类的定义和实现放置在同一个文件中。VS2005支持了模版类的分离编写,但是他又检测不出来很多其他的错误,这不得不说还是需要一个天才的大脑来解决这个问题

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-10 08:53:14

泛型模版类出现了LNK2019: 无法解析的外部符号错误的相关文章

error LNK2019: 无法解析的外部符号

最近在尝试用UDT进行通信,写了两个简单的客户端和服务端,但是编译的时候出现了“error LNK2019: 无法解析的外部符号”错误,为了以后进行总结,还是把解决方法记录下来. 1>------ 已启动生成: 项目: udt_appserver, 配置: Debug Win32 ------1>生成启动时间为 2013/11/11 20:53:08.1>InitializeBuildStatus:1>  正在创建“Debug\udt_appserver.unsuccessfulb

模板类 error LNK2019: 无法解析的外部符号

如果将类模板的声明和实现写在两个独立的文件中,在构建时会出现"error LNK2019: 无法解析的外部符号 "的错误. 解决方法有: 第一种方法,就是把类模板中成员函数的声明和定义都放在类的定义中(.h文件),不要分开就行. 第二种方法,在主文件(main文件)中既包含类模板的声明文件(接口文件)(.h文件),同时也包含类模板的实现文件(.cpp文件)就行了. 第三种方法,在类的定义中(.h文件)的最后包含类模板的实现文件(.cpp文件). 原因在于模板类和模板函数在使用的时候才会

VS2013解决error LNK2019: 无法解析的外部符号 mfcs120ud.lib

最近因为要改一个MFC项目重写学习MFC,没想到只是用VS2013新建一个最简单的MFC项目运行就报类上百个的类似"Error LNK2019: 无法解析的外部符号...mfcs120ud.lib"的错误. 经过一番折腾,终于发现问题所在.打开C:\Users\Administrator\AppData\Local\Microsoft\MSBuild\v4.0\Microsoft.Cpp.Win32.user.props 发现默认库引用了$(WindowsSDK_LibraryPath

error LNK2019: 无法解析的外部符号 &quot;class std::vector&lt;class std::basic_string&lt;char,struct std::char_traits&lt;cha

error LNK2019: 无法解析的外部符号 "class std::vector<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::allocator<class std::basic_string<char,struct std::char_traits<char>,class

VS常见错误之一:error LNK2019: 无法解析的外部符号

由于经常使用VS的开发环境,所以经常遇到一些错误提示,其中error LNK2019是很常见的一个报错.今天将此错误的原因和常见解决办法根据自己的经验小小总结一下. 问题样式: 1>SingleView.obj : error LNK2019: 无法解析的外部符号 [email protected],该符号在函数 "protected: int __thiscall CSingleView::CreateViewGLContext(struct HDC__ *)" (?    

错误 1 error LNK2019: 无法解析的外部符号 __imp__pthread_create,该符号在函数 _main 中被引用 解决方法

晚上花几分钟在windows下测了下pthread的用法,出现错误 1 error LNK2019: 无法解析的外部符号 __imp__pthread_create,该符号在函数 _main 中被引用 经网上搜,反正都没解决,其中一个说引入#pragma comment(lib, "pthreadVC2.lib")后解决,但笔者遇到的不是这个原因,而是版本问题.可参考http://www.cnblogs.com/zhjh256/p/6364777.html解决.

“error LNK2019: 无法解析的外部符号”之分析

最近在用VS 2008开发,初学遇到不少问题,最头疼的问题之一就是:LNK2019. 百度一下讲的并不够全面,反正都没解决我的问题. error LNK2019问题在VC 6.0中是error LNK2001: unresolved external symbol问题,可能错误号改了. 编译时出现类似这样的错误:Dlgcode.obj : error LNK2019: 无法解析的外部符号 _readRegmark,该符号在函数 [email protected] 中被引用.这种错误的本质是链接器

error LNK2019: 无法解析的外部符号 [email&#160;protected],该符号在函数 ___tmainCR...(转)

一,问题描述 MSVCRTD.lib(crtexew.obj) : error LNK2019: 无法解析的外部符号 [email protected],该符号在函数 ___tmainCRTStartup 中被引用  Debug\jk.exe : fatal error LNK1120: 1 个无法解析的外部命令 error LNK2001: unresolved external symbol [email protected] debug/main.exe:fatal error LNK 1

error LNK2019: 无法解析的外部符号 [email&#160;protected],该符号在函数 _wmain 中被引用

1>sockett.obj : error LNK2019: 无法解析的外部符号 [email protected],该符号在函数 _wmain 中被引用 解决方法: 没有加入相应的链接库,winmm.lib.在头文件添加 #pragma comment(lib,"ws2_32.lib") ws2_32.lib文件,提供了对以下网络相关API的支持,若使用其中的API,则应该将ws2_32.lib加入工程(否则需要动态载入ws2_32.dll).有时无法直接对头文件进行修改.在引