我将试着用英语把我的问题描述成最好的,首先从顶部开始:
这从一个名为'nt'的结构开始,它需要有6个of(这永远不会改变),它包含一些简单的变量--但也需要包含一个名为'p'的结构数组,它需要有4个of per'nt'对象。 'p'将包含一些进一步的简单变量,后面是另一个名为'f'的结构数组,最后只包含一些简单变量。
请参见下面的代码,了解如何尝试解决此问题:
struct t
{
//some simple variables here
struct p pts[4]; //will always contain 4 elements/objects
};
struct p
{
//more simple variables here
struct f fbs[X]; // x can be any value between 1-4
};
struct f
{
//finally some more simple variables
};
首先,我尝试使用:
struct p
{
//more simple variables here
struct f fbs[X]; // x can be any value between 1-4
};
struct f
{
//finally some more simple variables
};
才能开始。 然而,每当我尝试放入'f'的结构数组或仅放入单个结构'f'时,我都会得到一个错误:“退出状态1-字段'fbr'具有不完整的类型'f'”
除非我在'p'内将它初始化为:
struct f;
这不是我想要的。 如有任何建议/帮助,将不胜感激。 在网上找不到任何可以理解的东西。 我知道它可能是到到与内存分配,但不是100%确定。
提前致谢
这里的问题是声明/定义的顺序。
在编译器能够理解和使用它之前,您至少需要声明该类型(这将是一个“不完整类型”,因为它还没有定义。这些不完整类型只能在某些情况下使用,比如声明指向它们的指针等)。 然而,在您的案例中,由于使用的是ODR,因此需要对其进行定义。
struct p
{
//more simple variables here
struct f fbs[X]; // <---------- what is struct f? Don't know at this point
};
// struct f defined here after it's use
struct f
{
//finally some more simple variables
};
一个简单的修复方法是将structF
的定义移到structP
之前,并将两者移到structT
之前