我有这样的东西:
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/