为了使我的代码尽可能清晰,我正在尝试执行以下操作:
struct Test {
int a;
int b;
struct Test2 c;
};
struct Test2{
int d;
};
当然,此代码是错误的,因为在定义之前使用了struct Test2
。我想声明该结构。因此,我在struct Test2;
之前输入了struct Test
,但是没有用。有解决方案吗?
我知道函数是可能的,所以结构应该是这种情况吗?
答案 0 :(得分:4)
仅当struct Test
持有类型为struct Test2*
的指针时,它才有效。
如果包含实例,则必须在struct Test2
之前定义struct Test
,因为必须知道struct Test2
的大小。
答案 1 :(得分:4)
不可能这样做的原因是,当您在struct Test2
内放置一个具体的struct Test
对象时,需要知道Test2
的大小才能确定{{1 }}。但是,如果不先了解完整的定义,就无法知道尺寸。
前向声明使您可以使用指向类型的指针,因为您可以指向某个对象而无需稍后的详细信息。尽管它可能无法完全满足您的需求,但您可以可以通过向前声明执行以下操作:
Test
函数声明起作用的原因是它告诉您有关如何与函数接口的所有知识。您不需要此功能本身。