C++多文件编译时报错解决方案(.h.cpp.cpp)

问题一:声明与定义分离时报错

情况一:定义函数处的函数名不让过

在这里插入图片描述

该情况是因为没有声明类域.cpp中的函数找不到对应的函数名

解决方案:

1、在前面声明类域以及命名空间(这里的mystring是自定义的命名空间)

在这里插入图片描述

.
2、放入命名空间里面(此时函数前面就不用声明命名空间了,但是函数名前面依旧需要加上类名)

在这里插入图片描述

后续.cpp内容全都放在命名空间内部


情况二:定义函数处的参数不让过

在这里插入图片描述

该情况是因为缺省参数同时用在了定义和声明的参数里面(C++不允许声明和定义同时给缺省参数)

解决方法:

1. 在定义里面去掉缺省参数(一般不会在声明的时候去除缺省)

在这里插入图片描述


问题二:编译时因为头文件的位置而报错

在此之前,我们要先理解.h文件的特性

  1. 该文件属于头文件,不会被编译
  2. 如果.cpp文件包含了.h的头文件,那么在预处理阶段,会将他展开(把.h的内容全部复制一份进去)

情况一:在.cpp文件中包含了一些头文件后(如iostream、命名空间展开…),编译不让过

在这里插入图片描述
在这里插入图片描述

上述文件中:

  • .h文件没有包iostreamnamespace std
  • .cpp文件中包了iostreamnamespace std

该情况是因为:当 .h文件拷贝进 .cpp文件中后,h文件中的函数找不到其对应的命名空间

解决方法:

1. 更改 .cpp中头文件的包含次序

在这里插入图片描述

因为对于包含进来的.h文件,他会向上去找匹配的条件。而在.h文件前面命名空间已经展开,所以能成功找到命名空间,就不会编译报错

2. .cpp文件中全部都不加任何除 .h之外的头文件,把那些头文件都放进 .h中,这样预处理的时候也就全部拿过来了

在这里插入图片描述


问题三:其他的一些小问题

情况一:输入输出流重载的报错(静态、全局变量/函数的声明与定义)

报错如图,这种错误第一次见到都会无从下手

在这里插入图片描述

其实错误很简单,就是包含头文件的时候,如果头文件里面有全局、静态变量/函数,那么就会导致这个变量/函数会被每个 .cpp文件包含一次。这就导致在链接的时候,会发生重定义现象(上图fatal error LNK1169也表明了是在链接的时候出的错)

解决方法:

1. 将该变量/函数放入.cpp文件中

在这里插入图片描述

提示:上图的范围for语句写的时候如果报错了,很有可能就是没有写迭代器,需要手动写一下迭代器。因为这个范围for会在编译的时候自动替换成迭代器


如上,就完成了对一些常见错误的处理
string类的一些接口的实现

  • 24
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值