我有一个功能,看起来像这样:如何访问成员变量?
void myClass::memberStruct::memberFunction() {
// code
}
然后我有一个myClass
(保护)阵列,我想在这个函数(而不是静态数组)来访问。我如何访问这个数组?我不能使用this
,因为这给了我一个指向memberStruct
的指针。
我有一个功能,看起来像这样:如何访问成员变量?
void myClass::memberStruct::memberFunction() {
// code
}
然后我有一个myClass
(保护)阵列,我想在这个函数(而不是静态数组)来访问。我如何访问这个数组?我不能使用this
,因为这给了我一个指向memberStruct
的指针。
访问权限不是问题。嵌套类与其他类的成员具有相同的访问权限。
问题是您没有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 } };
- 端示例]
下面的程序能正常工作我使用克++ 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;
}
因为struct
与class
无关,所以即使您在class
中定义了struct
,也不能。
在class
中声明struct
仅将其范围限制为类,没有别的。所以不,你不能访问数组。例如,你可以将数组传递给memberFunction
。
或者让嵌套类成为朋友。 – NathanOliver
@NathanOliver或者:) – Rakete1111
@NathanOliver可以解决'受保护的'访问问题,但不是缺少合适的'myClass'实例。 – Quentin
这里没有'myClass'实例。您已经注意到,唯一的实例'* this'是'memberStruct'。 – Quentin
请不要把亵渎编辑回你的问题。 – NathanOliver
'myClass'和嵌套'memberStruct'是两个完全不相关的类型。嵌套类声明只是语法糖。除非以某种方式将myClass类型的对象传递到访问点,否则不能从'memberStruct'类型的对象访问'myClass'的任何非静态成员。你的数组只存在于'myClass'对象中。除非你有'myClass'对象,否则没有数组可以访问。 – AnT