我有一個功能,看起來像這樣:如何訪問成員變量?
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