如何在另一个struct中使用struct?

时间:2011-06-09 02:33:37

标签: c++ struct

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

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

所以当我来使用它时主要是:

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

如果不是我怎么用呢?

7 个答案:

答案 0 :(得分:10)

结构的每个成员变量通常都有名称类型。在您的代码中,A的第一个成员的类型为int,名称为data。第二个成员只有一个类型。你需要给它一个名字。我们说b

struct A {
  int data;
  B b;
};

为此,编译器需要知道B是什么,因此在声明A之前声明struct

要访问嵌套成员,请按名称引用路径中的每个成员,以.分隔:

A stage;
stage.b.number = 5;

答案 1 :(得分:7)

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

答案 2 :(得分:3)

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

现在你可以用它作为,

stage.b.number;

答案 3 :(得分:2)

struct B中的A必须具有某种名称,以便您可以参考:

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

答案 4 :(得分:0)

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

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

答案 5 :(得分: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);

答案 6 :(得分:0)

我有点像以下代码现在运行一段时间,它可以工作。

int?

@ zx485:编辑:编辑/清理代码。原始转储的借口。

说明:

定义lightTimer。基本上是一个包含2个变量的结构。

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

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

struct lightTimer {

制作一个实际的(命名的)实例:

struct lightTable {

我们现在有5个频道,有50个定时器。

访问如下:

struct lightTable channel[5];