簡體   English   中英

如何在另一個結構中使用結構?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM