我想了解我的编译器在C语言中的错误。
在application.h中,我创建了一个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;
然后我在temperature.h中将这个新变量声明为extern,以便在另一个文件中使用它:
extern ButterwothSecondOrderFilterParameter_str TMP_TemperatureLowPassFilterParameter_STR;
对于* .c文件,我只包含他的相关* .h文件,如果我需要来自另一个* .h文件的全局变量,我将它包含在* .h文件中
例如,temperature.c只包含temperature.h,并且可以访问application.h的typedef结构。我在temperature.h中包含application.h。
对于我的* .h文件,我总是使用:
封装#ifndef xxxx
#define xxxx
#endif
这是最后一个产生错误的声明:
Description Resource Path Location Type
unknown type name 'ButterwothSecondOrderFilterParameter_str'
我不知道我的错误在哪里....?
答案 0 :(得分:0)
我在temperature.h中包含了application.h。那么temperature.h是temperature.c中包含的唯一文件。我补充说,temperature.h通常包含在application.h中,没有任何后果。
我试着直接在temperature.c中添加application.h但是我有同样的错误。
我试图删除temperature.h中的extern声明,但它确实有效。
所以温度类型的未知类型,但不是温度的....我不明白。