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

问题描述 投票:0回答:8

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

struct A {
    int data;
    struct B;
};

struct B {
    int number;
};

所以在

main()
当我开始使用它时:

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

是吗?如果没有我该如何使用?

c++ struct
8个回答
21
投票

结构体的每个成员变量通常都有一个 nametype。在您的代码中,

A
的第一个成员的类型为
int
,名称为
data
。第二个成员只有一个类型。你需要给它一个名字。让我们说
b

struct A {
  int data;
  B b;
};

为此,编译器需要已经知道

B
是什么,因此请在声明 A 之前声明该结构体

要访问嵌套成员,请按名称引用路径中的每个成员,并用

.

:
分隔

A stage; stage.b.number = 5;
    

18
投票
struct A { struct B { int number; }; B b; int data; }; int main() { A a; a.b.number; a.data; }
    

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

现在您可以将其用作,

stage.b.number;
    

9
投票

struct B

内的
A
必须有某种名称,以便您可以引用它:

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

2
投票
struct A { int data; struct B { int number; }b; }; int main() { A stage = { 42, {100} }; assert(stage.data == 42); assert(stage.b.number == 100); }
    

0
投票
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);
    

0
投票
我现在运行了一段类似于以下代码的代码,并且它可以工作。

// 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;
    

0
投票
#包括

typedef 结构体 { 类型定义结构 { int x、y、z;

} 点; 噗噗;

}点;

int main(){

point pt; pt.pi.x= 5; std::cout << pt.pi.x << std::endl;
}

© www.soinside.com 2019 - 2024. All rights reserved.