如何声明包含对外部类的引用的成员变量

How to declare a member variable that contains a reference to outer class?

本文关键字:引用 成员 变量 对外部 包含 何声明 声明      更新时间:2023-10-16

我有如下代码:

class outer {
public:
  class inner {
    outer & o;
  public:
    inner(outer & o): o(o) {}
  };
  inner i(*this);
};

但这给了我错误说:

error: expect specifier before token '*'

我该怎么做?我必须使用指针吗?

1) 在 outer 的构造函数的初始值设定项列表中初始化i

inner i;
outer(): i(*this) {}

2) (仅限 C++11) 对 i 使用大括号初始值设定项。在这种情况下,您必须使用大括号,而不是括号。

inner i{*this};
你不能

这样做。你可以在外部类的构造函数中执行此操作

outer() : i(*this) {}

不过,这种方式很容易出错,因为实例尚未构造,并且this不完整。通常不要在初始值设定项列表中使用 this(gcc 会给你一个警告)

另一种方式仅在 C++ 11 中有效

inner i { *this };
成员

i可以在类中声明,但如果使用的是仅支持 C++98 的编译器,则无法初始化。您可以在 outer 的构造函数的实现中初始化它。

class outer {
public:
  class inner {
    outer & o;
  public:
    inner(outer & o): o(o) {}
  };
  outer() : i(*this) {}
  inner i;
};