【发布时间】:2013-08-13 20:36:59
【问题描述】:
我敢肯定这很愚蠢,但我很难过:
我在一个标头中声明了一个 typedef 的结构:
Firstheader.h
typedef struct Pin
{
uint8_t a;
uint8_t b;
} PinStruct;
然后我想在另一个头文件的函数声明中使用这个 typedef 的结构:
Secondheader.h
#include "Firstheader.h"
void foo (const PinStruct *myPin);
尽管 typedef 的结构在第一个标头中明确定义,并且在第二个标头中包括第一个标头,编译器仍抱怨“标识符 PinStruct 未定义”。有人请打我一巴掌,告诉我我错过了什么。
编辑:感谢 cmets 的家伙。编译器将第二个标头中的函数声明标记为错误源。确切的错误就像我写的那样:错误[Pe020]:标识符“PinStruct”未定义。
奇怪的是,如果我将结构定义复制到Secondheader.h 头文件中,编译器会立即遵守结构的重新定义。所以它知道它在那里。
【问题讨论】:
-
应该可以正常编译。您需要构造一个 minimal test-case,以及 exact 错误消息。
-
这应该可以吗?它是在标题中抱怨还是在其他一些代码中抱怨?
-
小心粘贴您收到的准确错误消息??您最好还确保您认为包含的标题实际上是这样。
#error或#pragma message都是很好的临时测试方法。 -
我想这可能有你的答案stackoverflow.com/questions/5343916/…
-
Firstheader.h的最后几行是什么?有时,当#include行之后的行报告错误时,实际错误来自包含的头文件的末尾。