指向其他结构的主结构 - 如何使用主

时间:2016-04-05 23:59:14

标签: c++ function pointers struct

所以我有3个文件:

  1. .h文件:有我的结构,a,b,& c,存储在这里
  2. .cpp文件:包含我编写的一些函数
  3. .cpp主文件:包含我的主要
  4. 在我的.h文件中,我有多个结构,让我们说:

        struct a{
    ..many fields of different types.....
    };
    
    struct b{
    ...many different fields of different types...
    };
    
    struct c{
    .......many different fields of different types
    };
    

    现在,我想创建另一个结构,它包含指向这些结构的指针,让我们说:

    struct master{
      a *first;
      b *second;
      c *third;
    };
    

    在我编写函数的cpp文件中,我需要“声明”所有内容,以便在进入main之前可以在函数中使用a,b和c的所有字段。这样做的目的是,当我编写函数时,我需要传递太多参数(有一些结构的超过20个字段),这些只会使一切变得杂乱无章。

    那么我的主结构会去哪里?如何以我可以使用的方式声明所有内容,在编写函数时从结构a中说出值“x”?如何声明struct a,b和c,以便master struct将它们识别为它指向的确切a,b和c?

    这些显然不是我问题的实际结构。我试着给出一个简单的例子,欢迎任何问题。主结构对我的程序设计至关重要。我正在用C ++写作

    编辑编辑: structures.h:

    struct a{
      int x;
      int w;
    };
    
    struct b{
      int y;
      int z;
    };
    
    struct master{  //if this should even go in .h?
      a *first;
      b * second;
    };
    

    functions.cc:

    掌握myMaster;

     int add(int y){
          int myValue = y + m.second->x;
          return myValue;
        }
    

    main.cc:

     int main (void) {
        extern master myMaster;
        a myA;
        myMaster.first = &myA;
        myMaster.first->x  = 10;
        int y = 3;
        int myValue = add(y);
      }
    

1 个答案:

答案 0 :(得分:1)

你似乎完全误解了结构的工作原理。

int main (void) {
  int y = 3;
  master.first->x = 10;
  int myValue = add(y);
}

master.first不是运行时程序中存在的东西 - 它只由编译器使用。

您需要创建 结构的实例。我称之为myMaster。你应该把它改成更好的名字。

int main (void) {
  int y = 3;
  master myMaster;
  myMaster.first->x = 10;
  int myValue = add(y);
}

这将编译。它仍然可能崩溃,因为myMaster.first现在是一个未初始化的指针 - 它实际上并不指向a

int main (void) {
  int y = 3;
  master myMaster;
  a myA;
  myMaster.first = &myA;
  myMaster.first->x = 10;
  int myValue = add(y);
}

现在myMaster.first指向myA。第myMaster.first->x = 10;行等同于myA.x = 10;

(请注意,如果myMaster.first实际上是a,而不仅仅是指向a的指针,那么myMaster.first.x = 10;就可以了,无需创建单独的a {1}})

那你怎么把它传递给一个函数呢?就像任何其他参数一样。我会选择一个愚蠢的名字来提醒你改变它。

// in main
int myValue = add(y, myMaster);

// other file
int add(int y, master blurrgh)
{
  int myValue = y + blurrgh.second->x;
  return myValue;
}

与任何参数(包括y)一样,add会以这种方式获得myMaster的副本,您可以使用它。与任何参数一样,如果您不希望复制myMaster,则可以将指针传递给它。