c++ 如何在一个结构中使用另一个结构?

vxqlmq5t  于 2023-02-10  发布在  其他
关注(0)|答案(7)|浏览(249)

我想使用嵌套结构,但不知道如何在其中输入数据。例如:

struct A {
    int data;
    struct B;
};

struct B {
    int number;
};

因此,在main()中,当我开始使用它时:

int main() {
    A stage;
    stage.B.number;
}

是吗?如果不是我怎么用它?

mkshixfv

mkshixfv1#

struct的每个成员变量一般都有一个 name 和一个 type,在你的代码中,A的第一个成员有类型int和名称data,第二个成员只有一个类型,你需要给予它一个名称,比如b

struct A {
  int data;
  B b;
};

要做到这一点,编译器需要已经知道B是什么,所以在声明A之前 * 声明该结构。
若要访问嵌套成员,请按名称引用路径沿着的每个成员,名称之间用.分隔:

A stage;
stage.b.number = 5;
c9qzyr3d

c9qzyr3d2#

struct A {
    struct B {
       int number;
    };
    B b;
    int data;
};
int main() {
    A a;
    a.b.number;
    a.data;
}
owfi6suc

owfi6suc3#

struct B {  // <-- declare before
  int number;
};
struct A {
 int data;
 B b; // <--- declare data member of `B`
 };

现在您可以将其用作,

stage.b.number;
68bkxrlz

68bkxrlz4#

A中的struct B必须具有某种名称,以便您可以引用它:

struct B {
    int number;
};
struct A {
    int data;
    struct B myB;
};
:
struct A myA;
myA.myB.number = 42;
vnjpjtjt

vnjpjtjt5#

struct A 
{
  int data;
  struct B
  {
    int number;
  }b;
};

int main()
{
  A stage = { 42, {100} };
  assert(stage.data == 42);
  assert(stage.b.number == 100);   
}
o0lyfsai

o0lyfsai6#

struct TestStruct {
    short Var1;
    float Var2;
    char Var3;

    struct TestStruct2 {
        char myType;
        CString myTitle;
        TestStruct2(char b1,CString b2):myType(b1), myTitle(b2){}
    };

    std::vector<TestStruct2> testStruct2;

    TestStruct(short a1,float a2,char a3): Var1(a1), Var2(a2), Var3(a3) {
        testStruct2.push_back(TestStruct2(0,"Test Title"));
        testStruct2.push_back(TestStruct2(4,"Test2 Title"));
    }       
};
std::vector<TestStruct> testStruct;

//push smthng to vec later and call 
testStruct.push_back(TestStruct(10,55.5,100));
TRACE("myTest:%s\n",testStruct[0].testStruct2[1].myTitle);
atmip9wb

atmip9wb7#

我有一些像下面的代码运行了一段时间现在生活和它的工作。

// define a timer
struct lightTimer {
  unsigned long time; // time in seconds since midnight so range is 0-86400
  byte percentage; // in percentage so range is 0-100
};
    
// define a list of timers
struct lightTable {
  lightTimer timer[50];
  int otherVar;
};
    
// and make 5 instances
struct lightTable channel[5]; //all channels are now memory allocated

@zx485:编辑:编辑/清除代码。原谅原始转储。
说明:
定义一个lightTimer。基本上是一个包含2个变量的结构体。

struct lightTimer {

定义一个lightTable,第一个元素是lightTimer。

struct lightTable {

创建实际(命名)示例:

struct lightTable channel[5];

我们现在有5个频道和50个计时器。
访问方式:

channel[5].timer[10].time = 86400;
    channel[5].timer[10].percentage = 50;
    channel[2].otherVar = 50000;

相关问题