use*_*692 6 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];
};
Run Code Online (Sandbox Code Playgroud)
在我的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...
}
Run Code Online (Sandbox Code Playgroud)
但是,这不起作用,因为单位是在数据之后声明的 project_typedef.h(如果我切换它的工作顺序).我得到的错误是"左'.x'必须有struct/union类型".我认为前方声明会解决这个问题.为什么不?
Ker*_* SB 11
当你定义 Data,所有成员都必须是完整的类型.由于此时UNITS不是完整类型,因此不起作用.(相比之下,UNITS_PTR 将被罚款,因为指向不完全类型是完全类型.)
简单地将Units定义放在定义之上Data,你应该没问题.
(正如@cnicutar已经注意到的那样,你也使用了x错误的数组.)