2016-11-09 22 views
1

C言語でのコンパイラのエラーを理解したいと思います。ファイルapplication.hでtypedef structとextern宣言の型名エラー - C言語

、私はtypedefは構造体を作成します。

typedef struct 
{ 
    FLOAT64 CoefficientA1_F64; 
    FLOAT64 CoefficientA2_F64; 
    FLOAT64 CoefficientB0_F64; 
    FLOAT64 CoefficientB1_F64; 
    FLOAT64 CoefficientB2_F64; 
    FLOAT32 OldOldRawValue_F32; 
    FLOAT32 OldRawValue_F32; 
    FLOAT32 RawValue_F32; 
    FLOAT32 OldOldFilteredValue_F32; 
    FLOAT32 OldFilteredValue_F32; 
    FLOAT32 FilteredValue_F32; 
}ButterwothSecondOrderFilterParameter_str; 

それから私は別のファイルtemperature.cで変数を作成します。

ButterwothSecondOrderFilterParameter_str TMP_TemperatureLowPassFilterParameter_STR; 

それから私は、externと、この新しい変数を宣言それ以外のファイルで使用する可能性があります。

extern ButterwothSecondOrderFilterParameter_str TMP_TemperatureLowPassFilterParameter_STR; 

* .cファイル関連する* .hファイルだけが含まれています。別の* .hファイルのグローバル変数が必要な場合は、* .hファイルに含めます。

たとえば、temperature.cにはtemperature.hとtypedef struct.hのstruct私は、application.hをtemperature.hにインクルードします。

#ifndef xxxx 
#define xxxx 
#endif 

そして、これはエラーを生成し、この最後の宣言です::私はいつもしてカプセル化し、私の* .hファイルについては

Description Resource Path Location Type 
unknown type name 'ButterwothSecondOrderFilterParameter_str' 

私の誤りだところ私は知りません。 ...?

+2

'application.h'ヘッダファイルではなく' temperature.h'ヘッダファイルのみをインクルードする場合、コンパイラは 'ButterwothSecondOrderFilterParameter_str'シンボルがどのようなものかをどのように知っていますか? –

+0

'temperature.h'は型を知るために' application.h'を含まなければなりません。 'temperature.c'の先頭に' temperature.h'(唯一)を含めることができ、ファイルをコンパイルする必要があります(それによってヘッダが自己完結します)。現時点では、ファイルはコンパイルされません。ヘッダーは自己完結型ではありません。ヘッダーガードは、ヘッダーが冪等であることを保証するために使用されます。たとえそれらが数回含まれていても、その効果は一度含めても同じです。 –

+0

言葉で説明するのではなく、コードで説明してください。[mcve]を入力してください。現在のところ、問題の原因は不明です。 – user694733

答えて

0

ちょうど私はtemperature.hにapplication.hを含めました。次に、temperature.cにはtemperature.hだけが含まれています。私はそれを追加します。

私はapplication.cを直接temperature.cに追加しようとしましたが、私は同じエラーがあります。

temperature.hでextern宣言を削除しようとしましたが動作します。

したがって、temperature.hの型は不明ですが、temperature.cの型はわかりません。わかりません。