[英]Nested class' access to enclosing class' private data members
我在实现一个嵌套类时遇到了麻烦,该类的构造函数是用一些封闭类的私有数据成员初始化的。
例:
Header File:
class Enclosing {
//...Public members
//...Private members
int x, int y
class Inner; // Declaration for nested class
};
Impl. File:
// Stuff...
class Enclosing::Inner {
explicit Inner() : foo(x), bar(y) // foo and bar are data members of Inner
//...
};
我invalid use of non-static data member
错误。 当涉及嵌套类访问其封闭类的成员时,是否有一些我缺少的东西?
成员x
和y
是Enclosing
非静态数据成员,这意味着它们只存在于Enclosing
类的具体对象中。 没有具体的对象, x
和y
都不存在。 同时,您试图在没有对象的情况下引用x
和y
。 这是无法完成的,这是编译器试图告诉你的。
如果要从x
和y
初始化成员Inner::foo
和Inner::bar
,则必须将Enclosing
类型的具体对象传递给Inner
的构造函数。 例如
class Enclosing::Inner {
explicit Inner(const Enclosing& e) : foo(e.x), bar(e.y)
{}
//...
};
额外注意:在原始的C ++ 98中,内部类没有特殊权限访问外部类。 使用C ++ 98编译器,您必须为内部类提供必要的权限(友谊)或将成员x
和y
公开为public。 但是,这种情况在C ++ 98中被归类为缺陷 ,并且决定内部类应该具有对外部类成员(甚至是私有成员)的完全访问权限。 因此,您是否必须在访问权限方面做任何额外的事情取决于您的编译器。
嵌套类无法访问封装类的privet数据成员。如果我们尝试访问封闭类的privet成员,则显示错误,它只能访问封闭类的公共数据成员.....
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.