我在编写代码时收到此错误,并在尝试了一个小时后完全不知道。
这是导致错误的文件os_memory_strategies.h:
#ifndef _OS_MEMORY_STRATEGIES_H
#define _OS_MEMORY_STRATEGIES_H
#include "os_mem_drivers.h"
#include "os_memheap_drivers.h"
#include "os_process.h"
#include "defines.h"
#include <stdint.h>
MemAddr os_Memory_FirstFit (Heap *heap, uint16_t size);
#endif
该行
MemAddr os_Memory_FirstFit (Heap *heap, uint16_t size);
导致错误。据我所知,“堆”在这一点上是未知的。 struct Heap在os_memheap_drivers.h中定义,包含在这里。结构看起来像这样:
typedef struct Heap{
prog_char *const name;
MemDriver *const driver;
AllocStrategy allocStrat;
Memory const memory;
}Heap;
使用AVRStudio并且所有文件都在同一目录中。
答案 0 :(得分:1)
最常见的原因是圆形标题包含。您将os_memheap_drivers.h
添加到os_memory_strategies.h
中(如上所示)。但显然你也直接或间接地将os_memory_strategies.h
包括在os_memheap_drivers.h
中。
包含警卫自然会“解决”这种循环包含是一些不可预测的方式,即这些文件中的一个最终将被包括在内,而另一个最终将被包含在第二个中。在您的情况下,os_memory_strategies.h
最终被包含在内,这就是为什么它不会将Heap
识别为类型名称。
循环标题包含永远不会起作用,永远不会实现任何目标。摆脱它,即确保os_memory_strategies.h
中没有包含os_memheap_drivers.h
。