[英]How to use a struct inside another struct?
我想使用嵌套結構,但我不知道如何在其中輸入數據,例如:
struct A {
int data;
struct B;
};
struct B {
int number;
};
所以主要是當我開始使用它時:
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
@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;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.