当前位置:首页 » 编程软件 » 代码编译多重定义

代码编译多重定义

发布时间: 2025-06-01 04:14:11

❶ C++中两个文件读取一个.h时多个多重定义错误

从昨晚到现在查了很多东西,但结果却超级简单:
首先#include在编译时会被预处理器将.h中的所有内容拷贝到当前文件中, 如果.h中还include了别的.h, 则递归拷贝;
如果.h文件中没有头文件保护,即#ifndef ... #define ... #endif则如果某文件include 1.h和 3.h, 而1.h也#include了3.h, 则会有完全相同的两份3.h中的代码, 这样就直接报错了; 但加入了头文件保护后就可以保证在单一文件中只会编译一遍3.h的代码;
所以到目前为止如果加入了头文件保护,在单一文件中不会有重声明(定义),编译可以通过,生成各个.o文件了, 头文件中定义的变量都定义并分配了空间,就你的问题而言,tool.o中有Map, 同时main.o中也有Map;
然后就是链接了,此时会将各.o中的全局符号加入全局符号表中,如果.o中有相同的全局变量则会报重定义, 即tool.o和main.o中的Map冲突了。

总结下:头文件保护只是保证在 单一文件中不会重复include, 但不保证在不同文件中重复include。

解决办法为在.h中只声明变量: extern map Map; 而在tool.cpp中定义: map Map;

多谢问题哈,终于搞清楚了这个问题!

❷ 编译C程序出现多重定义,怎么解决

应该是你在2个c文件中都定义了全局的MmiUtil_WaitKeyMenu,可以声明为static,或者改个名字

c语言编译时one or more multiply defined symbols found 。刚学c求大侠帮忙看看

意思是:一个或多个符号定义错误。

解决的方法和详细的操作步骤如下:

1、第一步,将源代码保存在文件中,然后编译并运行,如下图所示,然后进入下一步。

❹ C语言编译出现了 多重定义的符号 的报错

同一个工程中创建了多个main函数
关闭当前工程,另建一个工程后重新编译

热点内容
dnfgm源码 发布:2025-06-02 18:54:57 浏览:14
linuxhttpserver 发布:2025-06-02 18:39:04 浏览:792
搭建stun服务器 发布:2025-06-02 18:38:19 浏览:79
如何用服务器挂qq三国 发布:2025-06-02 18:20:29 浏览:86
java随机范围 发布:2025-06-02 18:11:48 浏览:64
手机怎么设置存储sd卡 发布:2025-06-02 18:06:02 浏览:919
屏幕锁屏密码怎么设置密码 发布:2025-06-02 18:05:26 浏览:185
手机压缩包怎么打开 发布:2025-06-02 18:04:30 浏览:933
云服务器ddos 发布:2025-06-02 17:57:39 浏览:15
jeep17指南者都有哪些配置 发布:2025-06-02 17:56:46 浏览:300