解決方法がわからない C の問題があります。4 つの c ファイル ac があるとします。紀元前; cc; dc であり、それぞれに .h ファイルがあります。bh ; チャンネル; dh、もちろん含まれています。私は次のことをしたい:
ああ、含まれます:
#include "b.h"
#include "c.h"
...
bh には以下が含まれます。
#include "d.h"
...
ch には以下も含まれます。
#include "d.h"
...
dh で構造体を定義します。たとえば、dh の内容は次のようになります。
typedef struct address {
int address;
} address;
問題は、エラーが発生することです(ファイルをコンパイルすると):
In file included from c.h:1:0,
from a.h:2,
from a.c:1:
d.h:3:16: error: redefinition of ‘struct address’
d.h:3:16: note: originally defined here
d.h:5:3: error: conflicting types for ‘address’
d.h:5:3: note: previous declaration of ‘address’ was here
なぜそれが起こっているのか理解しています(プリプロセッサが定義を2回インポートするため)が、どうすれば解決できますか?インクルードをそのようにする必要があります(もちろん、もっと多くのファイルがあるため、これは単なる例です)。私に何ができる?
注:私のメイクファイルは:
project: a.o b.o c.o d.o
gcc -g a.o b.o c.o d.o -ansi -Wall -pedantic -o output
a.o: a.c a.h b.c b.h c.c c.h d.c d.h
gcc -c a.c -ansi -Wall -pedantic -o a.o
b.o: b.c b.h d.c d.h
gcc -c b.c -ansi -Wall -pedantic -o b.o
c.o: c.c c.h d.c d.h
gcc -c c.c -ansi -Wall -pedantic -o c.o
d.o: d.c d.h
gcc -c d.c -ansi -Wall -pedantic -o d.o
大丈夫だと思います..それは私にとってはうまくいきました。お手伝いありがとう。