错误:在'*'标记之前预期')'

时间:2012-11-26 23:35:10

标签: c

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

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

1 个答案:

答案 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