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

问题描述 投票:0回答:4

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

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

c struct typedef header-files
4个回答
3
投票

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

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

我建议你插入一个简单的C文件,包括second.h,并使用main()函数,以便链接步骤也通过,例如:

#include "second.h"

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

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;

0
投票

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

#ifndef FIRST_H_
#define FIRST_H_

0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.