可能在标头中使用结构和typedef很糟糕

时间:2012-01-26 17:18:21

标签: c struct typedef header-files

您好如何重写可能不好的构造?
我试着询问如何修复它以使其工作there,但也许这是一个糟糕的概念。 还有其他解决办法吗? 它是在Eclipse中使用GCC for linux编译的,编译为C代码。

file first.h

#ifndef FIRST_H_
#define FIRST_H_

typedef struct foo
{
    int a;
    char *c;
} foo_struct;

#endif /* FIRST_H_ */

file 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无法解决” 我使用gcc编辑Eclipse for C和C ++,在Linux Ubuntu 11.10上工作。

4 个答案:

答案 0 :(得分:3)

好的,这不是编译器的错误,而是Eclipse的错误。简单地Googl'ing错误“无法解决”指向我谈论Eclipse CDT(用于C / C ++开发的eclipse子系统)的文章。

所以它与Eclipse有关,你的C头看起来语法正确。我相信没有C文件但只有标题,Eclipse不知道如何解析标题只是为了创建自己的索引数据库(必须用于智能感知,符号列表等)。

我建议您插入一个简单的C文件,包括second.hmain()函数,以便链接步骤也可以通过,例如:

#include "second.h"

int main() {
    wtf_struct my_variable;
    return 0;
}

答案 1 :(得分:1)

我遇到了相同的错误: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;

答案 2 :(得分:0)

我怀疑你已创建(并包含)两个标题,这两个标题都具有相同的标题保护

#ifndef FIRST_H_
#define FIRST_H_

答案 3 :(得分:0)

创建一组包装其他类型的typedef后,我遇到了同样的问题。 解决方案是重建Eclipse Index - 右键单击​​项目 - >指数 - >重建