C++编译报错`XXX‘被多次定义总结;未定义的引用等等

本文主要探讨了C++编程中常见的两种编译错误:'XXX'被多次定义和对'xxx'未定义的引用。前者可能是由于全局变量在多个文件中定义导致,解决方案是确保每个文件中只有一个完整定义,其余地方使用extern声明。后者则可能在链接阶段因缺少函数实现引起,需确保所有函数实现都在编译路径中。解决方法包括正确包含头文件和确保CMakeLists.txt配置无误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. C++编译报错`XXX’被多次定义总结

在这里插入图片描述

报错原因:

诸如类似的报错都是因为可能在两个或者多个.cpp文件/.h文件定义该全局变量,属于重复定义问题

解决办法是:

在VScode全局搜索该变量,只能有一处是正常全部变量定义,其他的都定义成extern外部变量。

不要把全局方法的定义放在头文件里!!!!

去每一个文件里改掉重新编译就好

其他
可以把所有的全局变量放入一个头文件 global.h (名字随意起,但要加条件编译)中,每一个变量前面加extern,声明一下这些变量将在其它文件中定义。 然后建立一个和头文件名字对应的.c / .cpp文件 如global.c。在里面声明所有的全局变量。

2. 对‘xxx’未定义的引用

在这里插入图片描述

原因:
出现这种情况的原因,主要是C/C++编译为obj文件的时候并不需要函数的具体实现,只要有函数的原型即可。但是在链接为可执行文件的时候就必须要具体的实现了。如果错误是未声明的引用,那就是找不到函数的原型,解决办法这里就不细致说了,通常是相关的头文件未包含。
解决办法是:
在CMakeLists.txt的add_executable()中添加相应的.cpp文件,如:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值