[其它应用] 重复定义错误的常见原因:

[复制链接]
2690|4
 楼主| szt1993 发表于 2025-3-24 22:01 | 显示全部楼层 |阅读模式
重复定义错误的常见原因:
1)重复定义可能是自己(在不同源文件里)定义的两个东西采用了同样的名字,或者是自己定义的东西恰好与C语言系统内部定义的某个东西重名。这时都需要改名字。

2)可能你在一个文件里定义了某个变量,而在另一个文件里需要使用它,但却忘记在变量说明前加 extern 关键字。

3)有些连接程序只按照外部名字的前X个(常见的是前6个,这是C语言标准的最低要求)字符考虑连接问题。如果你程序里有多个对象前6个字符相同,或者恰好某个对象名字的前6个字符与编译系统所提供模块里的某个名字相同,那么就可能出问题。

解决办法:找出出现冲突的名字,系统地将它们改为另外的名字。请注意,在改名字时一定要特别小心,如果更改不当或者不彻底,就会引进错误(某个使用实际用的可能不是你所希望的东西)。

利用C语言的static功能,将所有只在一个文件里使用的外部对象定义为static,可以避免自己在多个文件里定义的东西互相冲突(即使是用同样的名字,如果都是static也不会冲突,因为static的外部名字只在本文件里可以看见)。

中国龙芯CDX 发表于 2025-3-24 22:35 | 显示全部楼层
一定要避免重复定义
星辰大海不退缩 发表于 2025-3-27 13:06 | 显示全部楼层
在变量说明前加 extern 关键字
短句家 发表于 2025-7-12 21:16 | 显示全部楼层
重复定义错误常见于头文件未用宏保护、全局变量在多个文件定义、函数在头文件实现、类或结构体重复声明及链接时多目标文件包含同定义。
短句家 发表于 2025-9-19 15:53 | 显示全部楼层
重复定义错误常见原因有三类:一是同一源文件中多次声明同一变量 / 函数;二是头文件未加头文件保护(如 #ifndef/#define/#endif),被多个文件包含时重复定义;三是全局变量 / 函数在多个源文件中分别定义,未用 extern 声明为外部引用。本质是编译器遇到同一标识符的多次定义,违反 “单一定义规则”。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

351

主题

3039

帖子

6

粉丝
快速回复 在线客服 返回列表 返回顶部