0

我在编译代码时收到此错误,并且在尝试了一个小时后完全不知道。

这是导致错误 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,所有文件都在同一个目录中。

4

1 回答 1

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.

于 2012-11-26T23:46:34.050 回答