所以我有3个文件:
在我的.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);
}
答案 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
,则可以将指针传递给它。