1

だから私はCで相互参照の問題を抱えている可能性が高い

こんにちは(なぜか最初に書けませんでした)

基本的にこのコード:

structA.h:

#pragma once

#include "structB.h"

typedef struct
{
    B b;
}A;

structB.h:

#pragma once

#include "structA.h"

typedef struct
{
    int field;
}B;

void func(A* a);

structB.c:

#include "structB.h"

void func(A* a)
{
}

VC2010 で次のエラーが発生します。

structa.h(7): エラー C2016: C では、構造体または共用体に at が必要です

少なくとも 1 つのメンバー structa.h(7): エラー C2061: 構文エラー: 識別子

「B」など

したがって、 func(A* a) には A へのポインターしかないため、次のような前方宣言を試みます。

#pragma once

typedef struct A;

typedef struct
{
    int field;
}B;

void func(A* a);

structB.c に #include "structA.h" を追加します。

ただし、これは機能しません。修正するには、プロトタイプと実装で func(A* a) のパラメーターを func(struct A* a) に変更する必要があります...

しかし、この場合、構造体を型定義する目的を失います...

関数を別のファイルに単純に移動できることはわかっていますが、関数は構造に関連しているため、プロトタイプを構造体と同じファイルに保持したいと考えています。多分それはCで何かをする良い方法ではない.

誰かが回避策を知っていますか?どうもありがとうございました。

4

1 に答える 1

2
typedef struct structA;

これはどのようにコンパイルされましたか?-- 正しく:

typedef struct A A;
于 2012-06-15T04:32:40.553 に答える