20

ヘッダー ファイル port.h、port.c、および main.c があります。

次のエラーが表示されます: 'ports' uses undefined struct 'port_t'

.h ファイルで構造体を宣言したので、実際の構造体を .c ファイルに含めても問題ないと思いました。

port.c ファイルの一部のデータを隠したいので、前方宣言が必要です。

私のport.hには次のものがあります:

/* port.h */
struct port_t;

port.c:

/* port.c */
#include "port.h"
struct port_t
{
    unsigned int port_id;
    char name;
};

main.c:

/* main.c */
#include <stdio.h>
#include "port.h"

int main(void)
{
struct port_t ports;

return 0;
}

ご提案いただきありがとうございます。

4

4 に答える 4

25

残念ながら、コンパイラはport_tmain.c のコンパイル中に (バイト単位で) サイズを知る必要があるため、ヘッダー ファイルに完全な型定義が必要です。

于 2009-03-07T05:22:32.607 に答える
7

私が使用する一般的な解決策:

/* port.h */
typedef struct port_t *port_p;

/* port.c */
#include "port.h"
struct port_t
{
    unsigned int port_id;
    char name;
};

関数インターフェイスで port_p を使用します。port.h にも特別な malloc (および無料) ラッパーを作成する必要があります。

port_p portAlloc(/*perhaps some initialisation args */);
portFree(port_p);
于 2009-03-07T14:25:00.710 に答える