本文主要是介绍cpp遇到问题:include重复包含导致的redefinition,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
文章目录
- 报错
- 解决
报错
In file included from ./src/disk/elf.h:4,from ./src/disk/code.c:4:
./src/memory/instruction.h:46:16: error: redefinition of ‘struct INSTRUCT_STRUCT’46 | typedef struct INSTRUCT_STRUCT| ^~~~~~~~~~~~~~~
解决
这个错误是include重复包含了,
#include <header>
所做的事就是把header里面的东西copy一份过来,这样就容易让某些文件重复包含,就产生了这样的错误redefinition of something
知道了原理,那么如何解决呢?
请看下面。
解决办法是使用include guard,类似于设计模式里面的单例模式。将所有的.h文件 使用#ifndef #define #endif
这样的宏来避免重复include.
下面以mmu.h头文件来说明如何使用
//mmu.h
// include guard#ifndef mmu_guard // 如果宏mmm_guard 没有被定义,则往下执行,如果宏mmm_guard被定义了,则跳转到#endif
#define mmu_guard// memory management unit
#include <stdint.h>uint64_t va2pa(uint64_t vaddr);#endif
防止出现重复include的问题,建议所有的头文件都以这种形式书写。
这篇关于cpp遇到问题:include重复包含导致的redefinition的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!