类模板的困扰 LNK2019 (转)
原文地址:http://www.eetop.cn/blog/html/93/493893-14903.html
在使用类模板技术时,可在.h中实现,也可在.h和.cpp中分开实现,若用.h实现,不要在文件中加入非类模板代码,可避免重写定义错误..
1.声明部分
// Tpl.h
template<class T>
class CTpl
{
public:
CTpl();
virtual ~CTpl();
void Test(T t);
};
2.实现部分
// Tpl.cpp
#include "Tpl.h" template<class T>
CTpl<T>::CTpl() { } template<class T>
CTpl<T>::~CTpl() { } template<class T>
void CTpl<T>::Test(T t) { }
3.习惯错误用法
 
// main.cpp
#include "Tpl.h" int main()
{
CTpl<char> ts;
ts.Test();
return ;
}
build时出现link错误 main.obj : error LNK2001: unresolved external symbol "public: virtual __thiscall CTpl<char>::~CTpl<char>(void)" (??1?$CTpl@D@@UAE@XZ) main.obj : error LNK2001: unresolved external symbol "public: void __thiscall CTpl<char>::Test(char)" (?Test@?$CTpl@D@@QAEXD@Z) main.obj : error LNK2001: unresolved external symbol "public: __thiscall CTpl<char>::CTpl<char>(void)" (??0?$CTpl@D@@QAE@XZ) 这组错误信息和project中不加入Tpl.cpp的错误信息一样,即没有CTpl<char>的实现代码 我们把Tpl.cpp包涵到main.cpp中,问题解决
4.正确用法
// main.cpp #include "tpl.cpp"
int main()
{
CTpl<char> ts;
ts.Test();
return ;
}
5.总结
1.在使用以.h,.cpp分离实现模板类时,不能像使用普通类一样只简单的包涵.h头文件,应该在使用模板类的cpp文件中引入模板类相应的cpp文件 2.将模板类的声明与实现都放在.h中(在多个cpp中使用不同模板参数时可能会引起重复定义的编译错误)
类模板的困扰 LNK2019 (转)的更多相关文章
- 在VS中使用类模板出现出现LNK2019: 无法解析的外部符号错误。
		在VS中使用类模板出现出现LNK2019: 无法解析的外部符号错误,应在一个.h文件中完成方法的声明与实现,不要将实现放在cpp文件里,VS貌似不支持类模板分离 
- error LNK2019 无法解析的外部符号------类模板和内敛函数
		今天用类模型实现一个单链表,开始是.h和.cpp将类模板的声明与实现分开写的,结果总是报错: 错误 error LNK2019: 无法解析的外部符号 ?$SingleList@H@@QAE@XZ),该 ... 
- 类模板语法知识体系梳理(包含大量常犯错误demo,尤其滥用友元函数的错误)
		demo 1 #include <iostream> #include <cstdio> using namespace std; //template <typenam ... 
- c++类模板成员函数报错
		类模板成员函数要不就在类模板中实现,要不就和类模板写在同一个文件中. 否则然会出现下面错误: >main.obj : error LNK2019: 无法解析的外部符号 "public: ... 
- C++STL - 类模板
		类的成员变量,成员函数,成员类型,以及基类中如果包含参数化的类型,那么该类就是一个类模板 1.定义 template<typename 类型形参1, typename 类型形参2,...&g ... 
- C++ 类模板的使用
		从事C++挺久了,在前段时看书时,发现高手,都是在写模板无,泛型编程,顿感差距.自己连模板都没有写,于是就小小的研究了下模板的用法. 模板简而言之就是对某此对象的相同方法,或处理方式,进行归纳,总结, ... 
- Xcode6中如何使用自定义的类模板
		说到IOS类的模板,有些人感觉很陌生,但是只要有开发过IOS程序的人,其实都用过类的模板,只不过是用的系统自带的类的模板. 例如创建一个ClassTemplateVC继承于UIViewControll ... 
- VS2013,VS2015设置类模板文件表头
		一般VS的类模板文件是放在C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\ItemTemplatesCache\CSha ... 
- 不可或缺 Windows Native (19) - C++: 对象的动态创建和释放, 对象的赋值和复制, 静态属性和静态函数, 类模板
		[源码下载] 不可或缺 Windows Native (19) - C++: 对象的动态创建和释放, 对象的赋值和复制, 静态属性和静态函数, 类模板 作者:webabcd 介绍不可或缺 Window ... 
随机推荐
- <b>和<strong>标签区别
			简单说, strong是web标准中xhtml的标签,加强语气,起强调作用(默认是采用加粗来实现强调),逻辑标签: b 是html的,bold粗体. web标准主张xhtml不涉及具体的表现形式,“强 ... 
- mysql数据库delete数据时不支持表别名
			今天在帮同事查看一条删除的SQL语句执行出错的问题 SQL语句如下: 1 DELETE FROM LEAD_SYSTEM_MENU_ORG_REF as t WHERE t.resourceid='4 ... 
- .NET程序员爱上网站[整理]
			1.博客园(代码改变世界) http://www.cnblogs.com 2.开源中国社区(开源软件发现.使用和交流平台) http://www.oschina.net 3.CSDN(中国最大的IT社 ... 
- canvas 绘圆加边框
			HTML5中canvas元素,绘制圆形需要使用路径,开始时要取得图形上下文,首先使用路径来勾勒图形的轮廓,然后设置颜色,进行绘制. arc(cx,cy,radius,start_angle,end_a ... 
- php 数组排序代码
			php对数组排序代码. <?phpclass='pingjiaF' frameborder='0' src='http://www.jbxue.com' scrolling='no'> ... 
- [terry笔记]Oracle数据泵-schema导入导出
			数据泵是10g推出的功能,个人倒数据比较喜欢用数据泵. 其导入的时候利用remap参数很方便转换表空间以及schema,并且可以忽略服务端与客户端字符集问题(exp/imp需要排查字符集). 数据泵也 ... 
- Python学习教程(learning Python)--2.3.1 Python传参函数设计
			本节主要讨论设计传递多个参数子函数的设计方法. 在2.3节里我们讨论了如何自己设计一个带参数的子函数的设计方法,现在我们研究一下如何传递两个及以上参数的设计方法. 函数为何要带参数呢?其实原因很简单, ... 
- tomcat  datasource
			<Resource name="jdbc/xxx" auth="Container" type="javax.sql.DataSource&qu ... 
- 【微网站开发】之微信内置浏览器API使用
			最近在写微网站,发现了微信内置浏览器的很多不称心的地方: 1.安卓版的微信内浏览器底部总是出现一个刷新.前进.后退的底部栏,宽度很大,导致屏幕显示尺寸被压缩 2.分享当前网站至朋友圈时,分享的图片一般 ... 
- NFC Forum : Frequently Asked Questions (NFC 论坛:FAQ)
			NFC for Business What is the NFC Forum? The NFC Forum is a not-for-profit industry organization whos ... 
