通业开发人论坛

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 444|回复: 2

link2019

[复制链接]
发表于 2014-4-10 13:19:38 | 显示全部楼层 |阅读模式
error LNK2019: 无法解析的外部符号有2种解决办法.1.a类的声明和实现放在同一个文件,2.在a.h的#endif前面  加上#include "a.cpp" 原因是模板的编译和非模板的编译不同,非模板在编译的时候,会自动找到有#include<a.h>的文件加进去一起编译但是模板编译,系统先生成一个对应类型的实例,再进行编译的,如果在不同文件,那么就会出现问题,声明文件和定义文件无法匹配搜索例如:该模板有2个实例:a<int>   b(5);a<double>  c(5.0);那么模板就会生成2个实例  ,但是匹配的时候,发现有2个a.h文件,和2个a.cpp文件在a.cpp文件里面都有#include"a.h"语句 , 对于其中一个a.h,不知道应该寻找那个a.cpp文件进行匹配定义
回复

使用道具 举报

发表于 2014-4-17 22:05:22 | 显示全部楼层
谢谢分享。
该模板有2个实例:a<int>   b(5);a<double>  c(5.0);那么模板就会生成2个实例  ,但是匹配的时候,发现有2个a.h文件,和2个a.cpp文件在a.cpp文件里面都有#include"a.h"语句 , 对于其中一个a.h,不知道应该寻找那个a.cpp文件进行匹配定义"
这句没看懂。
假定在a.h里定义模板a
在a.cpp里有定义实例 b 和c
为什么说在匹配的时候会发现有2个a.h文件,还有2个a.cpp?
回复 支持 反对

使用道具 举报

发表于 2014-4-18 11:28:00 | 显示全部楼层
何鹏俊 发表于 2014-4-17 22:05
谢谢分享。
该模板有2个实例:a   b(5);a  c(5.0);那么模板就会生成2个实例  ,但是匹配的时候,发现有2个a. ...

a<int>的编译会生成a.h(其中类型是int),和a.cpp(其中类型是int)
a<double>的编译也会生成a.h(其中类型是double),和a.cpp(其中类型是double)

这样一个工程里就有两个a.h文件和两个a.cpp文件了.
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|Archiver|TongYe R&D Inc.

GMT+8, 2024-5-13 15:41 , Processed in 0.118007 second(s), 15 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2000-2022, Tongye. 粤ICP备17061194号

快速回复 返回顶部 返回列表