我在使用 class 类型的数组的C ++调用元素时遇到问题。 以下是我的代码示例;
//village.h
class village
{
public:
class Human
{
public:
void setGender(std::string g);
std::string getGender();
private:
std::string gender;
};
class World
{
public:
void join(Human c, int i);
private:
Human humanArray[20];
};
//village.cpp
void village::World::join(Human c, int i)
{
humanArray[i] = c;
cout << humanArray[i].gender << endl;
cout << c.getGender() << endl;
}
//main.cpp
village::Human h;
village::World world
h.setGender("Male");
world.join(c, 1);
我遇到的问题是,我收到了错误;
cout << humanArray[i].gender << endl;
说
'性别'是私密的。
但是,我没有声明Human类型的数组吗?添加时我没有收到错误,所以我认为这样可行。但是当我尝试调用一个元素时,我会收到错误。我无法将变量从私有变为公共。
答案 0 :(得分:2)
将其更改为
cout << humanArray[i].getGender() << endl;
有关其工作原理的技术背景:
成员变量gender
在Human
类中声明为 private ,因此其他类(及其实例)无法访问它(没有特殊权限)。成员函数Human::getGender()
和Human::setGender()
被声明为 public ,因此可以在类Human
的实例(对象)上访问它们。
因为成员函数可以访问它所属的类的私有成员(变量和函数),Human::getGender()
(对于Human::setGender()
也是如此)可以访问类gender
的私有 Human
成员变量。
函数join()
是类World
的成员,它与类Human
不同,因此它只能访问 public 成员(即具有访问Human::getGender()
,但不访问Human::gender
)
访问数组的元素与上述内容无关。可以通过对数组具有可见性/访问权限的代码访问数组的所有元素(将这些元素视为数组中的 public ,无法设置它们 private < / em>的)
答案 1 :(得分:1)
您应该使用访问者方法getGender()
cout << humanArray[i].getGender()<< endl;
hummanArray是World
的成员,因此类World
的任何实例都可以访问它。
gender是Human
类的成员,因此不能由World
类的成员函数直接访问。
答案 2 :(得分:0)
问题是成员变量gender
确实被声明为私有,因此您无法从World类访问它。当你说humanArray[i].gender
时,你会得到一个人类,然后尝试访问其性别成员(这是私有的)。请改用humanArray[i].getGender()
。