2010-12-11 7 views
2

うまくいけば、これは簡単な質問です...これは私のこの問題を再現するプロセスです。最初に私は私のソースファイルを作成します。Cヘッダーファイルにエラーが含まれています

その後、私は私の対応するヘッダファイルを作成
bash $ cat t.c 
#include "t.h" 

int main() 
{ 
    ABC abc; 
} 

:次に

bash $ cat t.h 
#ifdef _T_H 
#define _T_H 

#ifdef __cplusplus 
extern "C" { 
#endif 

typedef struct abc { 
    int a; 
} ABC; 

#ifdef __cplusplus 
} 
#endif 

#endif 

を、私はそれをコンパイルしよう:

bash $ gcc -o t t.c 
t.c: In function ‘main’: 
t.c:5: error: ‘ABC’ undeclared (first use in this function) 
t.c:5: error: (Each undeclared identifier is reported only once 
t.c:5: error: for each function it appears in.) 
t.c:5: error: expected ‘;’ before ‘abc’ 

が起こっていますか? t.cの型として 'ABC'の代わりに 'struct abc'を使用すると、コンパイルされます。なぜtypedefは機能していないのですか?

答えて

9

試してみてください。

#ifndef _T_H 
#define _T_H 

私は_T_Hが並んでいなかったので、これに気づくために起こった、と私の潜在意識の脳はそれが必要知っていました。

+0

ビンゴ。うわー、ええ、それはちょっとしたことですべてがうまくいきません。うまくいけば、その問題を抱えている誰かがこのスレッドを見るでしょう:) – Scott

+0

ところで、ヘッダーガードのために、アンダースコアで始まるもの、またはダブルアンダースコアを含むものを使用しないでください。このような名前は、標準ライブラリの実装で使用するために予約されています。ちょうど 'T_H'はそのトリックをうまくやっています。 –

関連する問題