2016-05-17 123 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