我有一个看起来像这样的函数:
void myClass::memberStruct::memberFunction() {
// code
}
然后我在myClass
中有一个(受保护的)数组,我希望在此函数中访问(不是静态数组)。我如何访问此阵列?我无法使用this
,因为它为我提供了指向memberStruct
的指针。
答案 0 :(得分:1)
您不能,因为struct
与class
无关,即使您在struct
中定义class
也是如此。
声明struct
中的class
只会将其范围限制在课堂上,而不是其他任何内容。所以不,你无法访问数组。
然而,您可以将数组传递给memberFunction
,例如。
答案 1 :(得分:1)
访问权限不是问题。嵌套类与该类的任何其他成员具有相同的访问权限。
问题是您没有myClass
的对象。没有它,你就无法访问该类的任何成员。
来自C ++ 11标准:
11.7嵌套类 [class.access.nest]
1嵌套类是成员,因此具有与任何其他成员相同的访问权限。封闭类的成员对嵌套类的成员没有特殊访问权限;通常的访问规则(第11条) 应遵守。 [示例:
class E { int x; class B { }; class I { B b; // OK: E::I can access E::B int y; void f(E* p, int i) { p->x = i; // OK: E::I can access E::x } }; int g(I* p) { return p->y; // error: I::y is private } };
- 结束示例]
以下程序适用于我使用g ++ 4.9.3。
#include <iostream>
class myClass
{
public:
myClass(int in) : var1(in) {}
struct memberStruct
{
int foo(myClass& obj);
};
protected:
int var1;
};
int myClass::memberStruct::foo(myClass& obj)
{
return obj.var1;
}
int main()
{
myClass obj1{10};
myClass::memberStruct obj2;
std::cout << obj2.foo(obj1) << std::endl;
}