我的代码如下:
class outer {
public:
class inner {
outer & o;
public:
inner(outer & o): o(o) {}
};
inner i(*this);
};
但这让我错误地说:
error: expect specifier before token '*'
我该怎么做?我必须使用指针吗?
答案 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;
};