C++ 如何访问成员变量?
我有一个函数如下所示:C++ 如何访问成员变量?,c++,oop,C++,Oop,我有一个函数如下所示: void myClass::memberStruct::memberFunction() { // code } 然后我在myClass中有一个受保护的数组,我想在这个函数中访问它,而不是一个静态数组。如何访问此阵列?我不能使用它,因为它给了我一个指向memberStruct的指针 您不能,因为结构与类无关,即使您在类中定义了结构 在类中声明结构只将其作用域限制在类中,而不是其他。因此,不,您无法访问阵列 例如,您可以将数组传递给memberFunct
void myClass::memberStruct::memberFunction() {
// code
}
然后我在myClass中有一个受保护的数组,我想在这个函数中访问它,而不是一个静态数组。如何访问此阵列?我不能使用它,因为它给了我一个指向memberStruct的指针 您不能,因为结构与类无关,即使您在类中定义了结构
在类中声明结构只将其作用域限制在类中,而不是其他。因此,不,您无法访问阵列
例如,您可以将数组传递给memberFunction。访问权限不是问题所在。嵌套类与该类的任何其他成员具有相同的访问权限 问题是您没有myClass的对象。否则,您将无法访问该类的任何成员 从C++11标准: 11.7嵌套类[class.access.nest] 1嵌套类是成员,因此具有与任何其他成员相同的访问权限。封闭类的成员对嵌套类的成员没有特殊访问权限;通行规则第11条 必须服从。[示例: -[结束示例] 使用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;
}
这里没有myClass实例。唯一的实例,*this,是一个memberStruct,正如您所注意到的。请不要在问题中重新编辑亵渎。myClass和嵌套memberStruct是两个完全不相关的类型。嵌套类声明只是语法糖。除非以某种方式将myClass类型的和对象传递到访问点,否则无法从memberStruct类型的对象访问myClass的任何非静态成员。您的数组仅存在于myClass对象中。除非你有一个myClass对象,否则就没有数组可访问。我不明白所有这些downvotes@Quentin为什么呢?结构只存在于类的上下文中,因此每个结构都必须有一个与其关联的类。为什么我不能访问那个类?或者让嵌套类成为朋友。@NathanOliver或者:@NathanOliver可以解决受保护的访问问题,但不能解决缺少合适的myClass实例的问题。@Quentin啊,是的。该函数仍然需要一个实例来处理。@NathanOliver这不是必需的,因为C++11--嵌套类中的声明可以使用封闭类的任何成员,遵循非静态成员的常用用法规则。自C++11以来
#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;
}