0

コードをコンパイルするときにこのエラーが発生し、1時間試してみてもまったくわかりません。

これは、エラー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);

エラーが発生します。私が理解しているように、「ヒープ」は現時点では不明です。構造体ヒープは、ここに含まれている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に含めます。

インクルードガードは、この循環インクルージョンを自然に「解決」します。これは予測できない方法です。つまり、これらのファイルの1つが最初にインクルードされ、もう1つが2番目にインクルードされます。あなたの場合、最初に含まれることになったので、タイプ名としてos_memory_strategies.h認識されません。Heap

循環ヘッダーの包含は機能せず、何も達成しません。それを取り除きます。つまり、os_memory_strategies.hに含まれていないことを確認しos_memheap_drivers.hます。

于 2012-11-26T23:46:34.050 に答える