C ++ Child类无法访问其他子类向量

时间:2017-06-11 18:32:53

标签: c++ class vector

在这里不知所措,希望有人能帮忙..

我有以下类结构。

包含两个子类KitchenlivingRoom的基类会议室。

我的基类中有一个向量

Room::Room()
{
    up = nullptr;
    down = nullptr;
    left = nullptr;
    right = nullptr;

    pocket = new vector<string>; 

}

定义为:

void Room::addPocket(string item)
{
    char emptyPocket;

    if (pocket->size()==1)
    {
        emptyPocket = 'N';
    }

    if(pocket->size()<1)
        {
            pocket->push_back(item);
            cout << "Item added to pocket" << endl;
        }
    else
        {
        cout <<"Your pocket is full" << endl;
        cout <<"Would you like to empty your pocket? 'Y' or 'N'" << endl;
        cin >> emptyPocket;
        if(emptyPocket == 'Y' || emptyPocket == 'y')
        {
            pocket->clear();
            cout <<"You have emptied your pocket." << endl;
        }
    }
}

我的程序功能如下。我有另一个班Game,其中发生以下情况。我进入childKitchen并添加到向量中。回到Game课程。我进入livingRoom类,当我访问向量时,它是空的?我在这里缺少什么?

1 个答案:

答案 0 :(得分:1)

不同子类实例之间不共享基类数据。每个子类都是并且有效地包含基类的不同实例。

因此KitchenpocketlivingRoom有另一个pocket。添加到Kitchen的{​​{1}}的内容未添加到pocket的口袋中。

相反,您应该考虑创建另一个类来表示在房间之间移动的实体,并让此实体类包含LivingRoom。无论实体在哪个房间,它总是具有相同的pocket

还要回避动态分配pocket。它们旨在消除管理动态分配的所有职责,因此动态分配std::vector只会使一些管理职责重新发挥作用而无益。