2016-05-17 117 views
-4

我有一个功能,看起来像这样:如何访问成员变量?

void myClass::memberStruct::memberFunction() { 
     // code 
} 

然后我有一个myClass(保护)阵列,我想在这个函数(而不是静态数组)来访问。我如何访问这个数组?我不能使用this,因为这给了我一个指向memberStruct的指针。

+2

这里没有'myClass'实例。您已经注意到,唯一的实例'* this'是'memberStruct'。 – Quentin

+2

请不要把亵渎编辑回你的问题。 – NathanOliver

+0

'myClass'和嵌套'memberStruct'是两个完全不相关的类型。嵌套类声明只是语法糖。除非以某种方式将myClass类型的对象传递到访问点,否则不能从'memberStruct'类型的对象访问'myClass'的任何非静态成员。你的数组只存在于'myClass'对象中。除非你有'myClass'对象,否则没有数组可以访问。 – AnT

回答

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 
    } 
}; 

- 端示例]


下面的程序能正常工作我使用克++ 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; 
} 
1

因为structclass无关,所以即使您在class中定义了struct,也不能。

class中声明struct仅将其范围限制为类,没有别的。所以不,你不能访问数组。例如,你可以将数组传递给memberFunction

+1

或者让嵌套类成为朋友。 – NathanOliver

+0

@NathanOliver或者:) – Rakete1111

+1

@NathanOliver可以解决'受保护的'访问问题,但不是缺少合适的'myClass'实例。 – Quentin