c++ 如何从另一个cpp文件访问未排序的私有Map[已关闭]

zsbz8rwp  于 2022-11-27  发布在  其他
关注(0)|答案(2)|浏览(128)

**已关闭。**此问题需要debugging details。当前不接受答案。

编辑问题以包含desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem。这将有助于其他人回答问题。
2天前关闭。
Improve this question
我是C++的新手,我试图从另一个cpp文件访问一个无序的私有Map,但是我在编译时遇到了一些错误。
我已经这样声明了Map:

class AccessList
{
    private:
        std::unordered_set<uint32_t> playerList;
};

在我的另一个cpp文件上,如果它是公共的,我可以访问playerList,如下所示:

auto playerIt = house->getGuestList().playerList.find(guid);
if (playerIt == house->getGuestList().playerList.end()) {
    house->kickPlayer(nullptr, this);
}

然而,如果它不能是公共的,因为我在这个方法中遇到了一些崩溃。它需要是私有的。但是我怎么能访问这个Map呢?如果我像以前那样访问,我在编译时会得到这个错误:

error: ‘std::unordered_set<unsigned int> AccessList::playerList’ is private within this context
 1192 |      auto playerIt = house->getGuestList().playerList.find(guid);

我试过在public上设置一个函数来从private获取Map,但是没有成功。
非常感谢您的光临。

xmakbtuz

xmakbtuz1#

private类成员的全部思想是从类本身的外部控制它的可访问性。如果你需要访问它,要么使它成为public,要么添加一个函数来返回一个指向私有成员的指针或引用。
但我更愿意详细说明为什么使其public会导致崩溃。

6jygbczu

6jygbczu2#

我想出来的办法是:

class AccessList
{
    public:
        std::unordered_set<uint32_t> getPlayerList() {
            return playerList;
        }

    private:
        std::unordered_set<uint32_t> playerList;
};

class House
{
    public:
        AccessList getGuestList() {
            return guestList;
        }
        AccessList getSubOwnerList() {
            return subOwnerList;
        }
        

    private:    
        AccessList guestList;
        AccessList subOwnerList;    
        
};

calling on other.cpp file:
    auto playerIt = house->getGuestList().getPlayerList().find(guid);
    if (playerIt == house->getGuestList().getPlayerList().end()) {
        house->kickPlayer(nullptr, this);
    }

但是,每次guestList访问getGuestList()都有问题吗?

相关问题