c - header 未找到 typedef 的结构

标签 c struct

我敢肯定这是非常愚蠢的事情,但我很难过:

我在一个 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 头文件中,编译器会立即重新定义该结构。所以它知道它在那里。

最佳答案

您的代码应该可以正常工作(使用 GCCCLANG 进行测试)。

  1. 您正在 typedef 中定义您的结构并将其别名为 PinStruct —— 没有错误。
  2. 您包含了第一个头文件——没有错误。
  3. 您在 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/

相关文章:

c - 如何获取当前日期和时间并将其以正确的格式保存到 char* 数组中?

c# - C Sharp 中的 SqlDataAdapter 错误

c - 重新分配无效的下一个大小

c - __attribute__((packed)) 类属性不是 GCC 特定的

c - IAR 编译器 : using struct with function pointers, 映射文件显示结构中声明的所有函数,无论是否使用函数

在内核中异步调用 DeviceIoControl

c - 如何使用 toupper() 函数来计算小写和大写用户输入?

c - 将结构从 x->y 转换为 x.y 并删除 malloc 时出现 Valgrind 错误。艰难地学习 C(前 16)- 额外学分

c - 如何理解if语句中的这种条件?

c++ - 从 STL_vector.h 创建结构 vector 时出错(可能微不足道)