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

时间:2014-02-28 21:41:53

标签: c++

我的代码如下:

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

  inner i(*this);
};

但这让我错误地说:

error: expect specifier before token '*'

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

3 个答案:

答案 0 :(得分:3)

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

inner i;

outer(): i(*this) {}

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

inner i{*this};

答案 1 :(得分:1)

你不能这样做。您可以在外部类

的构造函数中执行此操作
outer() : i(*this) {}

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

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

inner i { *this };

答案 2 :(得分:0)

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

的构造函数的实现中初始化它
class outer {
public:
  class inner {
    outer & o;
  public:
    inner(outer & o): o(o) {}
  };

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