栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

VS 报错“无法解析的外部符号” 情况1

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

VS 报错“无法解析的外部符号” 情况1

VS 报错“无法解析的外部符号” 情况1
  1. 报错截图
  2. 造成原因
  3. 改错方法
1.报错截图

2.造成原因 2.1最主要的原因:

类模板的声明放在h文件,而实现放在cpp文件

2.2 细节叙述

这个程序是准备自己实现一下链式存储的队列,然后队列类模板的声明与实现是分开放的,即声明放在h文件,实现放在cpp文件。
然后就报错了。

2.3原因解释

在CSDN上查一查“类模板的声明与实现应该放在同一文件”就可以看到大佬写的原因啦!

我自己的理解:
首先呢,我们在主函数中最开始会include我们自定义的头文件,就相当于把头文件里面的代码加到了主函数的前面,平时写的普通函数或者是类,就可以分开放,而且这应该是标准的方法呀。这个时候如果main函数中无论是调用我们自定义的普通函数还是类的成员函数,编译器都知道我们提前声明了,通过链接器的帮助,就可以在对应的cpp文件中去寻找定义,并执行结果后返回主函数中调用函数的地方,再继续向下执行。这样子是没有问题哒!

在更底层的方面来理解的话,就是编译器在编译时,会将我们写的文件提前编译成二进制代码(这样计算机才能看懂并执行),然后就像上面写的,会把这些二进制代码放到主函数的上面。
但是到了类模板这里,template ,T到底指的是什么?int?double?还是我们自定义的?计算机事先可不知道这些,而且要生成二进制代码的话,也应该是确定了类模板中到底是什么才可以生成计算机可以执行的二进制代码。
因此,如果我们把类模板的声明与实现分开写的话,编译的时候,h文件生成的二进制代码电脑是看不懂的,因为其中的T没有具化,当然计算机也不可能去cpp文件中找定义啦。
放到一起的时候,虽然没有具化,但函数定义与声明都在同一个文件中,省去了到cpp文件找定义这一步(而且计算机也不知道要去)
然后就可以啦!

(以上是我自己的理解,可能有很多地方都会有错,希望看到的各位大大能帮我指出来,谢谢啦!)

改错方法

将cpp文件中的实现全都放到h文件中,就不会报错了。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/290058.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号