Jus*_*reg 1 c struct typedef compiler-errors header
我收到编译器的错误消息指示(它是一个嵌入式C编译器):
错误[Pe020]:myflash.h中未定义标识符"MPTR"(参见下面的代码)
我正在使用名为MPTR的typedeffed结构.代码是:
//datahandler.h
#ifndef DATAHANDLER_H
#define DATAHANDLER_H
#include "enet_uip_ap01.h"
typedef struct _MPTR {
unsigned int flash_start;
unsigned int flash_pagestart;
unsigned short rom_start;
unsigned short rom_nextrecord;
unsigned short rom_lastrecord;
} MPTR;
...etc
Run Code Online (Sandbox Code Playgroud)
我想在另一个头中使用MPTR参数转发声明一个函数:
//myflash.h
#ifndef MYFLASH_H
#define MYFLASH_H
#include "enet_uip_ap01.h"
unsigned char FLASH_StorePage(MPTR *mptr, unsigned short addr, unsigned int flag);
Run Code Online (Sandbox Code Playgroud)
两个标题:"datahandler.h"和"myflash.h"都包含在"enet_uip_ap01.h"中.但是,上面的函数声明会引发编译错误.
最有可能的是它是一个简单的基本C语言问题,我不知道这是一种耻辱,但我没有想法如何解决它.如果有人能指出我的错误,我会很高兴.谢谢!
编辑:在这里放置其他代码:
//enet_uip_ap01.h
#ifndef ENET_UIP_AP01_H
#define ENET_UIP_AP01_H
//....other not relevant includes here...
#include "datahandler.h"
#include "myflash.h"
#endif
Run Code Online (Sandbox Code Playgroud)
看似循环包括:enet_uip_ap01.h包含datahandler.h,datahandler.h包含enet_uip_ap01.h.(同样适用于myflash.h)
假设源文件只包含datahandler.h:
一个可能的解决方案是使datahandler.h(和myflash.h)不包括enet_uip_ap01.h; 如果他们需要enet_uip_ap01.h给你的东西,他们必须具体包括那个东西,假设它没有直接在enet_uip_ap01.h中定义.
总结一下,你需要重构你的包含,使"包含图"没有周期.