2016-06-16 3 views
2

を含む地図を含む: util.h LinuxのC:中の再定義のエラーがIヘッダの下に持ってプロジェクトを有するヘッダ

main.c <- main.h <- tcphelper.h <- tcptest.h <- util.h 
       <- udptest.h <------------- util.h 

を、Iは構造体cpu_usageの関数プロトタイプを定義:

void get_cpu_usage(struct cpu_usage *cu); 

このプロジェクトをGCCでコンパイルすると、この再定義エラーが発生します。どのようにこの問題を解決するのですか?

ありがとうございました!

In file included from udptest.h:15:0, 
       from main.h:10, 
       from main.c:7: 
util.h:27:8: error: redefinition of struct cpu_usage 
struct cpu_usage{ 
     ^
In file included from tcptest.h:14:0, 
       from tcphelper.h:10, 
       from main.h:9, 
       from main.c:7: 
util.h:27:8: note: originally defined here 
struct cpu_usage{ 
     ^

答えて

6

Include guardsをヘッダファイルに追加する必要があります。これにより、内容が複数回含まれないようにします。例:

+1

C 7.1.3予約済み識別子: "アンダースコアで始まり、大文字または別のアンダースコアで始まるすべての識別子は、いつでもすべての用途に予約されています。" '_UTIL_H_'は言語によって予約されていることを私に暗示します。たぶん 'UTIL_H' – chux

+1

あなたが正しいです、標準ヘッダーとの競合があるかもしれません。別のオプションは "_INCLUDED"のような接尾辞を追加することです。 –

関連する問題