0
点赞
收藏
分享

微信扫一扫

cpp遇到问题:include重复包含导致的redefinition

北溟有渔夫 2022-01-10 阅读 15
c++

文章目录

报错

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_STRUCT46 | 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的问题,建议所有的头文件都以这种形式书写。

举报

相关推荐

0 条评论