如何声明包含对外部类的引用的成员变量
How to declare a member variable that contains a reference to outer class?
我有如下代码:
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;
};
相关文章:
- 具有引用成员的结构是否具有唯一的对象表示形式
- 初始化右值引用成员
- C++通过绑定到引用成员而缩短临时变量寿命?
- C++为具有引用成员变量的类创建复制构造函数
- 常量和引用成员函数限定符
- C++将引用成员绑定到构造函数参数
- 如果包含引用成员的类中缺少原始变量,为什么它仍然可以访问?
- 初始化指针或引用成员变量以指向另一个成员
- 将常量引用成员设置为临时变量是否安全
- 对象超出范围后,引用成员设置为 0
- 复制构造函数初始化初始化列表中的引用成员会导致指针悬空
- 使用默认构造函数引用成员变量初始化错误
- 如何从派生类访问引用成员变量?
- Visual Studio 2017 允许在构造函数中使用自身初始化引用成员.真的是合法的C++吗?
- 为什么当类具有引用成员时C++编译器不删除复制构造函数
- 引用成员到构造函数参数按值传递
- 在执行不平凡的构造函数之前引用成员
- 具有引用成员变量的多态性
- 从按值构造函数参数初始化的引用成员
- 深度复制包含引用成员(C++)的结构