问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

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

创作时间:
作者:
@小白创作中心

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

引用
CSDN
1.
https://blog.csdn.net/m0_74331527/article/details/138244988

在Arduino程序开发中,变量重复定义是一个常见的错误。本文通过一个具体的案例,详细介绍了变量重复定义问题的原因和解决方案,对于从事嵌入式开发或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:

解决问题

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

避免头文件的重复包含,不一定能避免变量、函数、类、结构体的重复定义。

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

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

总结

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

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号