我想使用嵌套结构,但我不知道如何输入数据。例如:
struct A {
int data;
struct B;
};
struct B {
int number;
};
所以在main()
函数中,当我开始使用它:
int main() {
A stage;
stage.B.number;
}
这样正确吗?如果不是,我该如何使用它?
一般来说,结构体的每个成员变量都有一个名称和一个类型。在您的代码中,A
的第一个成员具有类型int
和名称data
。第二个成员只有一个类型,你需要给它一个名称。假设叫做b
:
struct A {
int data;
B b;
};
为了做到这一点,编译器需要先知道什么是B,所以在声明A之前先声明该结构体。要访问嵌套成员,请按名称沿路径引用每个成员,用点号(.)分隔:A stage;
stage.b.number = 5;
struct A {
struct B {
int number;
};
B b;
int data;
};
int main() {
A a;
a.b.number;
a.data;
}
struct B { // <-- declare before
int number;
};
struct A {
int data;
B b; // <--- declare data member of `B`
};
现在你可以这样使用它:
stage.b.number;
A
中的 struct B
必须有一个名称,以便您可以引用它:
struct B {
int number;
};
struct A {
int data;
struct B myB;
};
:
struct A myA;
myA.myB.number = 42;
struct A
{
int data;
struct B
{
int number;
}b;
};
int main()
{
A stage = { 42, {100} };
assert(stage.data == 42);
assert(stage.b.number == 100);
}
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);
我已经运行了类似以下代码的一段时间,并且它可以正常工作。
// 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
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;
struct B
,但那只是类型。你仍然需要给它一个名字。(用struct B
而不是只用B
更像是C风格而不是C ++,所以如果你以那种方式编写代码,人们会认为你很奇怪。) - Rob Kennedystruct B;
声明存在一个嵌套类A::B
,稍后将定义该类。而这与不是嵌套的B
没有任何关系。 - James Kanze