调用另一个函数的私有成员 - 数组和类型的问题

时间:2012-03-29 19:03:33

标签: c++ arrays class private

我在使用 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类型的数组吗?添加时我没有收到错误,所以我认为这样可行。但是当我尝试调用一个元素时,我会收到错误。我无法将变量从私有变为公共。

3 个答案:

答案 0 :(得分:2)

将其更改为

cout << humanArray[i].getGender() << endl;

有关其工作原理的技术背景:

成员变量genderHuman类中声明为 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()