c++ - 初始化结构包含对结构的引用

标签 c++ data-structures struct initialization

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

谢谢

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);
}

最佳答案

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);
}

关于c++ - 初始化结构包含对结构的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14789058/

相关文章:

c++ - 为什么不能在类范围内推导我的类静态自动函数的类型?

c++ - 通过 shared_ptr 返回的 Singleton 对象是线程安全的吗?

java - 在java中查找两个句子之间的不同单词

c++ - 如何将数据存储在私有(private)类中的二维 vector 中?

c++ - 属性可以应用于构造函数参数吗?

c++ - Visual Studio : user depended defines

struct - 返回对一个结构的部分的引用作为另一个结构的字段

c - "struct a a1 = {0};"不同于 "struct a a2 = {5};"为什么?

java - Java可以使用用户定义的对象作为二维数组键的索引吗?

data-structures - 节点数与高度的关系