当前位置:首页 » 编程软件 » 编译的多重定义怎么解决

编译的多重定义怎么解决

发布时间: 2023-02-10 02:29:55

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

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

2. 关于multiple defination of (多重定义 )的错误

1.
不要在.h里面声明变量,而是在.c(.cpp)里面定义int mm=3;
然后在A.h里面用extern int mm;

2.
extern不要赋值。

ps:还没解决?
回楼上,没用的,那个能防止重复include,但是不能解决这里的问题。
头文件里面是不提倡也不应该定义一个变量的。
如果熟悉VC的win32程序,就知道那个theApp也是放在cpp文件里的,而不是头文件。

3. c语言编译出现了 多重定义的符号 的报错

程序为:

#include<stdio.h>
intmain(){
printf("Helloworld!");
return0;
}

4. C++项目编译错误:找到一个或多个多重定义的符号。。我觉得应该是include的问题,但是不知道怎么改

确实是include的问题
因为错得比较离谱,对于函数的定义、函数的声明、函数的定义和声明分开等等概念不清楚,所以建议还是专门找找这方面的资料,了解如何编写多文件工程再来。

另:有个不正统的方法可以把你这个改得能编译通过,把book.cpp和BData.cpp从工程中去掉(不是删除文件)应该就没问题了

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

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

6. c语言里系统总是说,有符号多重定义,怎么找是哪个符号,选取下面的

一般编译器会提示哪个符号被重定义。下面是VS2012环境编译的情况。如果编译器不指出,可以右击变量,点击转到定义,看下是否多个地方定义。

7. c++避免多定义或重定义

你好,最好的处理办法是在工程的cpp文件里定义全局变量,然后在别的文件里不要包含。直接用
extern声明就好了。比如extern int g_a;

8. 多重定义怎么解决

链接时多重定义怎么办?一般解决方案是:只保留一个定义的地方就好了,这对强迫症,很友好!但往往有时又嫌麻烦,或者杂七杂八的的原因导致了,两个定义都保留,但只让链接时,只链接第一个遇到的定义函数!


其实吧,如果这多重定义的函数是存在于不同的库,一般默认都只会找第一个遇到的库里面的函数就好了。

但是,因为,链接的最小单元一般是文件,.o。如果a.o和b.o同时存在test1(),但是a.o有test2(),b.o有test3(),结果这两个接口函数都会被系统使用,那么a.o和b.o就会被同时链接进去*。这就是为何会报多重定义的错误。

为了让这种情况下,链接器还是不报错,还是只会找第一个遇到的库里面的函数。可以使用以下参数:

-Wl,-z,multidefs或者Wl,'-z muldefs',以及--allow-multiple-definition

让ld在遇到重复定义时候,只处理第一个定义。

9. 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;

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

10. 在vs2008软件上,编译下面这个,结果出现一个或多个多重定义的符号,请问什么意思,怎么改

我使用2008编译运行都没有问题。就是生成的文件名出现乱码。我推测,你是不是在创建2010的项目时,直接选择,从现有文件中导入。没有将源文件放入项目目录造成的。你可以检查一下

热点内容
java返回this 发布:2025-10-20 08:28:16 浏览:750
制作脚本网站 发布:2025-10-20 08:17:34 浏览:1012
python中的init方法 发布:2025-10-20 08:17:33 浏览:719
图案密码什么意思 发布:2025-10-20 08:16:56 浏览:879
怎么清理微信视频缓存 发布:2025-10-20 08:12:37 浏览:774
c语言编译器怎么看执行过程 发布:2025-10-20 08:00:32 浏览:1127
邮箱如何填写发信服务器 发布:2025-10-20 07:45:27 浏览:351
shell脚本入门案例 发布:2025-10-20 07:44:45 浏览:229
怎么上传照片浏览上传 发布:2025-10-20 07:44:03 浏览:911
python股票数据获取 发布:2025-10-20 07:39:44 浏览:876