C++变量的重复定义——写Arduino程序遇到的问题

问题描述

今天在烧写Arduino程序的时候,出现了这样一个报错:

定睛一看,好像是说变量重定义了?

我循着有关的代码文件望去,发现也就只有一处地方定义了变量呀,怎么会说我重复定义了呢?于是我开始求助于度娘,终于找到了解决问题的答案。

程序结构

这里先大致介绍一下我的程序结构,如图所示。

本程序中存在Player.h以及Function.h,Player.h在Function.h程序中被引用,且Player.h中包含着定义变量send_buf和recv_buf的头文件——DFPlayer_Mini_Mp3.h。Function.h在多个cpp文件中被引用。

Player.h:

DFPlayer_Mini_Mp3.h:

Function.h:

解决问题

问题的解决得益于以下链接,有兴趣的可以深入研究:

C++ "multiple definition of .. first defined here" - ChrisZZ - 博客园 (cnblogs.com)icon-default.png?t=N7T8https://www.cnblogs.com/zjutzz/p/4018816.htmlC/C++中头文件重复包含和变量重复定义_包含不同头文件的redefinition-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/qq_34809033/article/details/80652116避免头文件的重复包含,不一定能避免变量、函数、类、结构体的重复定义。

在我的程序中,由于DFPlayer_Mini_Mp3.h拥有着变量的定义,且DFPlayer_Mini_Mp3.h所在的Player.h多个cpp文件引用,导致在源程序编译以及目标程序链接的时候,出现了重复定义的操作。

/**************************

因此,将程序更改为只在main文件里面对Player.h进行引用,就解决了因多次引用编译而导致的重定义问题!

**************************/

总结

其实避免重复定义关键是要避免重复编译 ,防止头文件重复包含是有效避免重复编译的方法,但是最好的方法还是记住那句话: 头文件尽量只有声明,不要有定义 。这么做不仅仅可以减弱文件间的编译依存关系,减少编译带来的时间性能消耗,更重要的是可以防止重复定义现象的发生,防止程序崩溃。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值