1

私のファイルは

main.c

#include"A.h"
#include"B.h"

A.c

#include"A.h"

B.c

#include"B.h"

私は、すべてのファイル、A.c , B.c, main.cつまりA and B.

したがって、私は持っています

A.hそしてB.h両方が持っています

#include"struct.h"

今、私は私のmain.cでそれを見ます

両方の構造に対して複数の宣言があります。この問題を解決するにはどうすればよいですか。構造の何を変更すればよいですか?

ありがとう

4

4 に答える 4

7

インクルード ガードを使用します。

ヘッダー.h:

#ifndef AHEADER_H
#define AHEADER_H

// ... rest of header here

#endif

bheader.h:

#ifndef BHEADER_H
#define BHEADER_H

// ... rest of header here

#endif
于 2013-03-28T09:55:08.070 に答える
1

ガードをそのまま使用できます。

#ifndef MY_STRUCT
#define MY_STRUCT
#include "struct.h"
#endif

複製してはいけない部分を厳選したい場合

于 2013-03-28T09:55:20.227 に答える
1

インクルード ガードでヘッダー ファイルをラップします。、 このような:

#ifndef MYHEADER_H
#define MYHEADER_H

    // your definitions

#endif

各ヘッダー ファイルには、一意の名前を持つ独自のガードが必要です。上記のプリプロセッサ ディレクティブを英語に翻訳するとMYHEADER_H、次のようになります#endif。これにより、1 つのヘッダーが 1 つの翻訳単位内に 1 回だけ含まれることが保証されます。

于 2013-03-28T09:55:26.027 に答える
1

header guard「struct.h」を1回だけ含めるようにするために、単にいわゆるを使用します。

// struct.h
#ifndef STRUCT_H
#define STRUCT_H

struct ...{

}

#endif
于 2013-03-28T09:56:33.937 に答える