Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何访问成员变量?_C++_Oop - Fatal编程技术网

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