【发布时间】:2013-01-25 04:36:44
【问题描述】:
是否可以有一个包含对结构的引用的结构。这些是如何初始化的?请参阅下面的简短示例。
谢谢
typedef struct {
int a;
}typeInner1;
typedef struct {
int b;
}typeInner2;
typedef struct {
typeInner1 &one;
typeInner2 &two;
}typeOuter;
void fun2(typeOuter *p){
p->one.a =2;
p->two.b =3;
}
void fun(typeInner1 &arg1,typeInner2 &arg2){
typeOuter *ptr = new typeOuter;//<-- how to write initializer
fun2(ptr);
}
int main(){
typeInner1 arg1;
typeInner2 arg2;
fun(arg1,arg2);
//now arg1.a should be 2 and arg2.a=3
}
好的,感谢您的所有意见。我还必须修改 typeOuter 的 typedef 以使其工作。下面的完整工作代码供其他人找到这篇文章。
#include <cstdio>
typedef struct {
int a;
}typeInner1;
typedef struct {
int b;
}typeInner2;
typedef struct typeOuter_t {
typeInner1 &one;
typeInner2 &two;
typeOuter_t(typeInner1 &a1, typeInner2 &a2) : one(a1), two(a2) {}
}typeOuter;
void fun2(typeOuter *p){
p->one.a =2;
p->two.b =3;
}
void fun(typeInner1 &arg1,typeInner2 &arg2){
typeOuter *ptr = new typeOuter(arg1,arg2);
fun2(ptr);
}
int main(){
typeInner1 arg1;
typeInner2 arg2;
fun(arg1,arg2);
//now arg1.a shoule be 1 and arg2.a=3
fprintf(stderr,"arg1=%d arg2=%d\n",arg1.a,arg2.b);
}
【问题讨论】:
-
顺便说一句,
typedef struct {...} foo;在 C++ 中不是“惯用的”,只是写struct foo {...};更常见(并且可以让您直接使用foo作为类型名称)。
标签: c++ data-structures struct initialization