1

register.hとaddrmode.hという名前の他の2つのヘッダーを含むcpu.hという名前のファイルがあります。cpu_t構造体はcpu.hで定義されており、2つにはそれらの関数の必要性が含まれています。他の2つのインクルードファイルにcpu.hをインクルードしようとしましたが、何もインクルードされていません。cpu.hにインクルードガードが設定されているため、含まれていないと思います。誰かがこれをどのように解決できるか知っていますか?

4

5 に答える 5

10

cpu_t他の3つに含まれている独自のヘッダーファイルで宣言しますtypes.hか?

于 2009-08-08T19:15:57.687 に答える
3

循環インクルードは、コードの保守とデバッグの邪魔になる可能性があります。cpu.hを2つのファイルに分割することをお勧めします。1つはregister.hとaddrmode.hが含まれ、もう1つはこれら2つのファイルが含まれます。

于 2009-08-08T19:21:43.697 に答える
1

register.hとaddrmode.hを配置して、構造体の定義が不要になるようにするか、構造体の宣言を独自のヘッダーに移動します。

cpuの定義は必要ないことに注意してください。

  • struct cpuのtypedefを定義するには:

    typedef struct cpu cpu_type;

  • structcpuへの変数または型ポインターのメンバーを定義するには:

    struct cpu * ptr;

  • タイプstructcpuの外部変数を宣言するには:

    extern struct cpy myCpu;

  • struct cpu引数を取る関数を宣言するには:

    void foo(struct cpu p);

したがって、その定義を提供することを目的としないヘッダーで構造の定義が必要になる主な理由は次のとおりです。

  • タイプstructcpuのメンバーを持つ構造体をヘッダーで定義します。

    struct intelcpu {struct cpu base; };

  • メンバーにアクセスする必要がある、またはそのタイプのローカル変数を持つインライン関数を定義します

于 2009-08-08T19:33:51.643 に答える
0

他の2つのヘッダーを含める前に、cpu.hでstruct cpu_tを定義できますか?

実際、私はOrenTrutnerの答えの方が好きです。私の答えははるかに壊れやすいです---あなたは本当に相互再帰的なヘッダーファイルを望んでいません。

于 2009-08-08T19:16:44.330 に答える
0

あなたは「何も含まれていない」と述べましたが、それは他の観察に基づく控除です。どのようなエラーメッセージが表示されていますか?もっと情報が必要だと思います。

于 2009-08-08T19:18:47.417 に答える