使用包含类数组通过类对象的指针包含数组访问类的成员数组是私有的



我有一个该类(obj)的数组作为类成员,我想创建Box类(这是包含类)的数组,并通过该Box类的p指针对象成员访问xyz obj[5];

obj数组是private但我想我可以用指针访问它。我说的对吗?

#include <iostream>
#include <bits/stdc++.h>
using namespace std;
class xyz{
public:
int x;
};
class Box {
public:
// Constructor definition

Box ()
{ 
cout<<"without constructot"<<endl;
}
xyz *p=obj;   

private:
xyz obj[5];

};
int main()
{
Box b[5];;
Box *p=&b[0];
(b+2)->(obj)->x=5;
//cout <<(b+2)->(obj)->x<<endl;     

}

(b+2)->(obj)->x=5;异常

error: expected unqualified-id before ‘(’ token
28 |  (b+2)->(obj)->x=5;
|         ^
main.cpp:28:10: error: ‘obj’ was not declared in this scope      28 |  (b+2)->(obj)->x=5;
|          ^~~

您的代码中存在许多问题。首先,我不确定您想要使用obj周围的括号来完成什么,但是成员访问操作符(->)不是这样工作的-它必须在之后立即与成员的名称。

也许你想要的是这样的东西:( (b + 2)->obj )->x = 5;?然而,在这样的表达式中,外部括号是不必要的,因为->具有从左到右的结合性(尽管为了清晰起见,您可以使用它)。

然而,即使做了这样的修改,你仍然试图访问一个私有的从类的定义之外获取类的成员,这是不允许的。一般来说,如果成员是private,那么只能从类的成员函数(或友元函数)内部访问它。

作为最后的观察:我不知道为什么你使用(b + 2),当你可以使用b[2]。你的意思是使用指针(p),在前一行分配b[0]的地址(如(p + 2)->obj->x = 5;)?


作为脚注,我强烈建议您阅读以下Stack Overflow帖子:

  1. 为什么我不应该#include ?
  2. 为什么使用命名空间std;"被认为是不好的做法?

最新更新