[英]Probably bad using structures and typedef in header
您好,如何重写可能不好的结构?
我试图询问如何修复它以使其在那里工作,但也许这都是糟糕的构想。 还有其他解决方案吗? 它在 Eclipse 中使用 GCC 编译为 linux,编译为 C 代码。
文件first.h
#ifndef FIRST_H_
#define FIRST_H_
typedef struct foo
{
int a;
char *c;
} foo_struct;
#endif /* FIRST_H_ */
文件 second.h:
#ifndef SECOND_H_
#define SECOND_H_
#include "first.h"
typedef struct wtf
{
foo_struct *poleFOO[5];
}wtf_struct;
#endif /* SECOND_H_ */
具体在文件 second.h 行 foo_struct *poleFOO[5]; 抛出:“foo_struct 无法解析”我在 Linux Ubuntu 11.10 上工作,在编辑器 Eclipse 中使用 gcc 为 C 和 C++。
好的,这不是来自编译器的错误,而是来自Eclipse的错误。 只是Googling错误“无法解决”就使我指向了有关Eclipse CDT(用于C / C ++开发的eclipse子系统)的文章。
因此,它与Eclipse有关,您的C标头在语法上看起来正确。 我相信,没有C文件,只有标头,Eclipse不知道如何仅分析标头以创建自己的索引数据库(必须用于智能感知,符号列表等)。
我建议您插入一个包含second.h
的简单C文件,并使用main()
函数,以便链接步骤也可以通过,例如:
#include "second.h"
int main() {
wtf_struct my_variable;
return 0;
}
我遇到了相同的错误:typedef中的包装类型出现“ vuint16-无法解析”(如下所述),并且通过在Eclipse环境中重建索引成功解决了该问题(右键单击项目->索引->重建)注意:这不是编译器错误!
[headerfile1: can.h]
#define vuint8 uint8
[headerfile2: can_local.h]
#include "Can.h" /* include all needed types */
typedef struct sCanRxFullInfoStruct
{
vuint16 objectNumber; //error line
} tCanRxFullInfoStruct;
创建一组包装其他类型的typedef后,我遇到了同样的问题。 解决方案是重建Eclipse Index-右键单击项目-> Index-> Rebuild
我来到这里是因为我遇到了类似的问题,而 Eclipse 也是罪魁祸首(我仅使用 GCC 进行了复制并且它有效)。 我试图重现 OP 的问题,但它在我的环境中编译正常:/。 因此,我将展示对我有用的方法。
唯一有帮助的是使用struct
进行extern
声明,并使用我用typedef
定义的新类型在源文件中进行实际定义,如下所示:
lib1.h:
typedef struct sMyStruct
{
// struct fill
}tMyStruct;
lib2.h:
extern struct sMyStruct my_struct, *p_my_struct;
//extern tMyStruct my_struct, *p_my_struct; // This wouldn't work
lib2.c:
tMyStruct my_struct, *p_my_struct;
在 lib2.h 中使用extern tMyStruct
无论如何,它都不会编译(无法识别typedef
)。 清理项目无济于事,重建索引等也无济于事。令人惊讶的是,我试图在一个新项目中以最少的方式重现该问题......并且它编译得很好,对于两个版本,所以。 我不知道,Eclipse 被一些邪恶的幽灵文件挂断了。 我被困了好几天,唯一对实际项目有用的是我上面展示的。
我怀疑您已经创建(包括)了两个标头保护都相同的标头
#ifndef FIRST_H_
#define FIRST_H_
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.