zoukankan
html css js c++ java
multiple definition of
总结了解决multiple definition of
的方法:
问题原因:
当多个文件包含同一个头文件时,并且你的.H里面没有加上条件编译
#ifndef TEST_H
#define TEST_H
#endif
就会独立的解释,然后生成每个文件生成独立的标示符。在编译器连接时,就会将工程中所有的符号整合在一起,由于,文件中有重名变量,于是就出现了重复定义的错误。
方法1:
给每一个头文件加上条件编译,避免该文件被多次引用时被多次解释,这是个应该是习惯。这个方法会解决大部分低级问题。
方法2:
当方法1无效时,可以把所有的全局变量放入一个头文件 global.h (名字随意起,但要加条件编译)中,每一个变量前面加extern,声明一下这些变量将在其它文件中定义。 然后建立一个和头文件名字对应的.c or .cpp文件 如global.c。在里面声明所有的全局变量。例如:void(*Handl_Display)();
然后,让涉及到全局变量的文件include ”global.h“。这样编译时,会先对global.c编译生成一个global.o ,然后再和其它文件的.o链接生成可执行文件。
方法3:
懒人方法,在所有的全局变量前加上static ,声明成静止变量。也能解决问题。
所有的方法都是网来的,O(∩_∩)O哈哈~
谢谢所有的提供方法的哥们~
查看全文
相关阅读:
201771010101 白玛次仁 《2018面向对象程序设计(Java)》第七周学习总结
201771010101 白玛次仁 《2018面向对象程序设计(Java)课程学习进度条》
实验六201771010101 白玛次仁
第七周作业
第七周上机练习
第六周作业
第六周上机练习
第五周上机作业
Java第四周作业
Java第四次作业
原文地址:https://www.cnblogs.com/cainiaoaixuexi/p/3482111.html
最新文章
第三次JAVA作业
第二次java作业
第一次java作业
第八周上机作业
第七周作业
第七周上机作业
第六周作业
第四次上机作业
第五次作业
第四周作业
热门文章
第四次作业
第二次作业
第一次上机作业
201771010101白玛次仁《面向对象程序设计(java)》第十二周实验总结
201771010101 白玛次仁《面向对象程序设计(Java)》第十一周学习总结
201771010101 白玛次仁 《2018面向对象程序设计(Java)》第十周学习总结
201771010101 白玛次仁 《2018面向对象程序设计(Java)》第九周学习总结
201771010101 白玛次仁 《2018面向对象程序设计(Java)》第八周学习总结
201771010101 白玛次仁 第七周《2018面向对象程序设计(Java)课程学习进度条》
201771010101 白玛次仁 《2018面向对象程序设计(Java)课程学习进度条》
Copyright © 2011-2022 走看看
当多个文件包含同一个头文件时,并且你的.H里面没有加上条件编译
#ifndef TEST_H
#define TEST_H
#endif
就会独立的解释,然后生成每个文件生成独立的标示符。在编译器连接时,就会将工程中所有的符号整合在一起,由于,文件中有重名变量,于是就出现了重复定义的错误。
方法1:
给每一个头文件加上条件编译,避免该文件被多次引用时被多次解释,这是个应该是习惯。这个方法会解决大部分低级问题。
方法2:
当方法1无效时,可以把所有的全局变量放入一个头文件 global.h (名字随意起,但要加条件编译)中,每一个变量前面加extern,声明一下这些变量将在其它文件中定义。 然后建立一个和头文件名字对应的.c or .cpp文件 如global.c。在里面声明所有的全局变量。例如:void(*Handl_Display)();
然后,让涉及到全局变量的文件include ”global.h“。这样编译时,会先对global.c编译生成一个global.o ,然后再和其它文件的.o链接生成可执行文件。
方法3:
懒人方法,在所有的全局变量前加上static ,声明成静止变量。也能解决问题。
所有的方法都是网来的,O(∩_∩)O哈哈~
谢谢所有的提供方法的哥们~