c - 在 C 中具有前向声明的 typedef 结构

标签 c struct typedef forward-declaration

我有这样的东西:

typedef struct Data DATA, *DATA_PTR;
typedef struct Units UNITS, *UNITS_PTR;

struct Data
{
    double miscData;
    UNITS units;
};

struct Units
{
    double x[2];
    double y[2];
    double z[2];
};

在我的 project_typedef.h 文件中。

在另一个文件中,我有这样的东西:

void fileInput(DATA_PTR data)
{
     //usual declarations and other things
     data->miscData = 0; //Works!
     data->units.x[0] = 5; //Doesn't work
     //etc...
}

但是,这不起作用,因为单元是在 project_typedef.h 中的数据之后声明的(如果我切换它起作用的顺序)。我得到的错误是“'.x' 的左边必须有结构/union 类型”。我认为前向声明可以解决这个问题。为什么不呢?

最佳答案

当您定义 Data 时,所有成员都必须是完整类型。由于此时 UNITS 不是完整的类型,因此这不起作用。 (相比之下,UNITS_PTR 没问题,因为指向不完整类型的指针是完整类型。)

只需将 Units 定义放在 Data 定义之上,就可以了。

(正如@cnicutar 已经指出的,您还错误地使用了数组 x。)

关于c - 在 C 中具有前向声明的 typedef 结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8156438/

相关文章:

c++ - 从文件读取并将值放入结构数组时遇到问题

c - 如何从 typedef 生成静态结构

c++ - 类成员的typedef

无法解决此c程序中的内存管理(valgrind)

您可以在结构初始化中创建一个数组吗?

是否可以在其定义中取自动存储期限的变量的地址?

c - 静态变量和全局变量的使用

c# - 为什么 C# 可以在运行时处理这种明显愚蠢的对象提升?

c - 使用 typedef 的 C 枚举类型的值

c++ - 如何在可能是任何类的属性的 void 函数上创建 typedef?