0

ライブラリには、エッジ、頂点、グラフなどの構造体がいくつかあります。その構造体の本体をユーザーから隠したい (ユーザーは API を使用する必要がある) ため、ヘッダー ファイル (例: edge.h) に次のように記述しました。

typedef struct edge edge_t;

また、edge 構造体の定義は edge.c にあります。

struct edge {...};

それはうまくいきますが、構造体の本体を自分のコードから隠したくありません。edge.c で使用したい:

vertex_t v;
v.some_attribute = x;

不完全な型エラーへのポインターを逆参照するようになりました。これを修正することは可能ですか? すべての構造体要素にアクセサ (ユーザーなど) を使用する他のオプションはありますか?

4

2 に答える 2

5

他のソース ファイルの構造を使用する必要がある場合は、構造の完全な定義が必要です。したがって、解決策はstruct edge { /* ... */ }、ヘッダー ファイルも含めて、必要なときにいつでもヘッダーをインクルードすることです。

于 2012-04-20T10:41:41.380 に答える
2

Joachim Pileborg は正しいです。

コンパイラは、構造体を操作できるようにするには、構造体のサイズを知る必要があります。これを防ぐ唯一の方法は、ユーザーにポインターの使用を強制することです。

typedef struct edge *edge_t;

コンパイラーはポインターのサイズを認識しているため、ポインターに割り当てる必要があるスペースを認識しています。

于 2012-04-20T10:45:36.447 に答える