从找不到包含的标题中键入

时间:2015-05-16 10:29:26

标签: c atmelstudio

我的C代码有一个奇怪的问题,我不太懂 我有两个标题文件os_memory.hos_mem_drivers.h

os_memory.h

#ifndef OS_MEMORY_H_
#define OS_MEMORY_H_

#include "lcd.h"
#include "os_mem_drivers.h"

static const MemAddr gui_alloc_table_start = 0x1C8;

#endif /* OS_MEMORY_H_ */

os_mem_drivers.h

#ifndef OS_MEM_DRIVERS_H_
#define OS_MEM_DRIVERS_H_

#include "os_memory.h"
#include "defines.h"
#include "os_core.h"

typedef uint16_t MemAddr;

#endif

如果我尝试编译此代码,编译器会给出错误unknown type name 'MemAddr'。我没有得到它,因为我在每个.h文件中包含了正确的头文件,所以不应该有任何错误。
我在这里找不到任何东西吗?

我在这个项目中使用AtmelStudio 6.1和C语言。

1 个答案:

答案 0 :(得分:2)

在包含MemAddr

之前,您应该移动"os_memory.h"类型的定义

<强> os_mem_drivers.h

#ifndef OS_MEM_DRIVERS_H_
#define OS_MEM_DRIVERS_H_

#include <stdint.h>

typedef uint16_t MemAddr;

#include "os_memory.h"
#include "defines.h"
#include "os_core.h"

#endif

但更重要的问题是"os_memory.h""os_mem_drivers.h"的循环包含。每一个都包括另一个:包括防护,防止递归包含,但让你很难理解真正发生的事情。你应该尝试解决这个问题。