初始化结构包含对结构的引用

mon*_*ing 4 c++ struct initialization data-structures

是否有可能包含对结构的引用的结构。这些是如何初始化的?请参阅下面的简短示例。

谢谢

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
}
Run Code Online (Sandbox Code Playgroud)

好的,感谢所有输入。我还必须修改 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);
}
Run Code Online (Sandbox Code Playgroud)

Rei*_*ica 8

给出typeOuter一个合适的构造函数:

struct typeOuter
{
  typeInner1 &one;
  typeInner2 &two;
  typeOuter(typeInner1 &a1, typeInner2 &a2) : one(a1), two(a2) {}
};



void fun(typeInner1 &arg1, typeInner2 &arg2) {
  typeOuter *ptr = new typeOuter(arg1, arg2);
  fun2(ptr);
}
Run Code Online (Sandbox Code Playgroud)


Mat*_*Mat 5

在 C++11 之前,您需要 struct 的构造函数typeOuter,并初始化初始化列表中的成员引用:

typeOuter(typeInner1& i1, typeInner2& i2) : one(i1), two(i2) {}
Run Code Online (Sandbox Code Playgroud)

使用 C++11,您还可以选择直接使用初始值设定项列表(无需自己定义构造函数):

typeOuter *ptr = new typeOuter { arg1, arg2 };
Run Code Online (Sandbox Code Playgroud)