通过指针使用包含 class 数组访问 class 的成员数组 - class 对象的包含数组是私有的
Accessing member array of class using containing class array through pointer - contained array of class object is private
作为 class 成员,我有一个 class (obj
) 的数组,我想创建 Box
class 的数组(这是包含 class)并通过 Box
class.
的 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;
?但是,在这样的表达式中不需要外括号,因为 ->
具有从左到右的结合性(尽管为了清楚起见,您可以使用它)。
但是,即使进行了该修改,您仍然试图从 class 的定义之外访问 class 的 private 成员,这是不允许的。一般来说,如果成员是 private
,那么您只能从 class.[=22= 的成员函数 (或友元函数)中访问它 ]
作为最后的观察:我不确定你为什么要使用 (b + 2)
而你可以只使用 b[2]
。您是否要使用在上一行(如 (p + 2)->obj->x = 5;
中)分配了地址 b[0]
的指针 (p
)?
作为脚注,我强烈建议您阅读以下 Stack Overflow 帖子:
- Why is "using namespace std;" considered bad practice?
作为 class 成员,我有一个 class (obj
) 的数组,我想创建 Box
class 的数组(这是包含 class)并通过 Box
class.
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;
?但是,在这样的表达式中不需要外括号,因为 ->
具有从左到右的结合性(尽管为了清楚起见,您可以使用它)。
但是,即使进行了该修改,您仍然试图从 class 的定义之外访问 class 的 private 成员,这是不允许的。一般来说,如果成员是 作为最后的观察:我不确定你为什么要使用 作为脚注,我强烈建议您阅读以下 Stack Overflow 帖子:private
,那么您只能从 class.[=22= 的成员函数 (或友元函数)中访问它 ]
(b + 2)
而你可以只使用 b[2]
。您是否要使用在上一行(如 (p + 2)->obj->x = 5;
中)分配了地址 b[0]
的指针 (p
)?