提问者:小点点

数组内的结构数组-C++


我将试着用英语把我的问题描述成最好的,首先从顶部开始:

这从一个名为'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%确定。

提前致谢


共1个答案

匿名用户

这里的问题是声明/定义的顺序。

在编译器能够理解和使用它之前,您至少需要声明该类型(这将是一个“不完整类型”,因为它还没有定义。这些不完整类型只能在某些情况下使用,比如声明指向它们的指针等)。 然而,在您的案例中,由于使用的是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之前

相关问题


MySQL Query : SELECT * FROM v9_ask_question WHERE 1=1 AND question regexp '(数组|结构|数组|c++)' ORDER BY qid DESC LIMIT 20
MySQL Error : Got error 'repetition-operator operand invalid' from regexp
MySQL Errno : 1139
Message : Got error 'repetition-operator operand invalid' from regexp
Need Help?