我敢肯定这是非常愚蠢的事情,但我很难过:
我在一个 header 中声明了一个 typedef 结构:
Firstheader.h
typedef struct Pin
{
uint8_t a;
uint8_t b;
} PinStruct;
然后我想在另一个头文件的函数声明中使用这个 typedef 结构:
Secondheader.h
#include "Firstheader.h"
void foo (const PinStruct *myPin);
尽管在第一个 header 中明确定义了 typedef 的结构,并且在第二个 header 中包含第一个 header ,但编译器会提示“标识符 PinStruct 未定义”。有人请打我,告诉我我错过了什么。
编辑:感谢大家的评论。编译器将第二个 header 中的函数声明标记为错误源。确切的错误就像我写的那样:Error[Pe020]: identifier "PinStruct"is undefined。
奇怪的是,如果我将结构定义复制到 Secondheader.h
头文件中,编译器会立即重新定义该结构。所以它知道它在那里。
最佳答案
您的代码应该可以正常工作(使用 GCC
和 CLANG
进行测试)。
- 您正在
typedef
中定义您的结构并将其别名为PinStruct
—— 没有错误。 - 您包含了第一个头文件——没有错误。
- 您在
foo
的函数声明中使用了PinStruct
-- 没有错误。
错误可能在您的C源文件中,您是否在“文件2”的C源文件中包含了“文件2”的头文件?示例:
// File file_1.h
typedef ...
...和:
// File file_2.h
#include "file_1.h"
// Function declaration.
...最后(这里有错误):
// File 2.c
#include "file_2.h" // Forgot?
关于c - header 未找到 typedef 的结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18218766/