【问题标题】:(C++) Pointers to Pointers of objects in different classes(C++) 指向不同类中对象指针的指针
【发布时间】:2018-03-19 03:47:52
【问题描述】:

每个人。我正在为学校做一个最后的项目,进展顺利,但我在尝试使用指向指针的指针时遇到了一些问题。我会尽力解释以下问题:

所以我有一个名为 Player 的类,看起来像这样:

class Player
{
    Player();
    int health;
    void adjustHealth(int);
};

Player::Player()
{
    health = 40;
}

void Player::adjustHealth(int adjust)
{
    health += adjust;
}

我有另一个名为 Shelter 的类,其中包括“Player.h”,看起来有点像这样:

class Shelter
{
    Shelter();
    Player* player;     // Create a pointer to Player class.
};

在 Shelter 头文件中,我的默认构造函数中有以下内容:

Shelter::Shelter()
{
    ...Other code here.
    player = new Player();
}

在 Shelter 头文件中,我将这个新播放器用于以下用途:

 player->adjustHealth(-1);  // Subtract one health from the player.

效果很好。

我面临的问题是创建另一个名为 Church 的类,该类位于单独的头文件中,并在游戏中充当单独的位置。我希望 Church 使用与 Shelter 相同的播放器,因此它具有所有相同的统计数据等,而不是在 Church 中创建一个新播放器(这就是我在 Shelter.h 中所做的)。

现在,我有类似的东西:

class Church
{
Church();
Shelter **cplayer; // This is supposed to be the pointer to the pointer.
};

默认构造函数是我遇到问题的地方。我想使用 Shelter 中的同一个播放器,而不是像在 Shelter 中那样创建新播放器。

Church::Church
{
    What should I do here?
}

我已经尝试了很多方法,但我无法让它发挥作用。最终我希望能够做这样的事情:

   player->adjustHealth(-1);    // Subtract one health from the player. 

仅在教堂中,因此玩家的统计数据(例如健康)会被调整,无论他们在哪个位置。

我希望我的问题是有道理的。如果没有,我可以尝试更好地澄清。无论如何,提前谢谢。

【问题讨论】:

  • 听起来您希望player 成为一个全局变量,而不是在一个类中。
  • 你“应该在这里做的”是弄清楚如何找到你需要的指针。由于只有您拥有对代码的完全访问权限,并且知道可以从何处访问每个对象,因此只有您拥有回答问题所需的所有信息。
  • 我不明白为什么你需要一个指向指针的指针。你想让ShelterChurch 类型的两个对象有一个指向同一个Player 对象的指针吗?
  • 感谢您的回复。我无法为这个项目使用全局变量,但我很感激这个建议。
  • 那么你可能想要给ShelterChurch的构造函数指向Player对象的指针。不需要指向指针的指针。

标签: c++ c++11 pointers visual-c++ member-function-pointers


【解决方案1】:

我面临的问题是创建另一个名为 Church 的类,该类位于单独的头文件中,并在游戏中充当单独的位置。我希望 Church 使用与 Shelter 相同的播放器,因此它具有所有相同的统计数据等,而不是在 Church 中创建一个新播放器

这听起来像是使用std::shared_ptr 的理想情况。

class Shelter
{
    Shelter();
    std::shared_ptr<Player> player;     // Create a pointer to Player class.

    // Provide a public accessor
    public:
       std::shared_Ptr<Player> getPlayer() const { return player; }
};

class Church
{
    Church(std::shared_ptr<Player> pl) : player(pl) {}
    std::shared_ptr<Player> player;

    // You haven't explained in your post why you need this.
    // Maybe you don't need it.
    // Shelter** shelter;
};

【讨论】:

  • 嗨。感谢您的回复。教会班级目前作为一个单独的地点运作。所以庇护所是一个,教会是另一个。当玩家在庇护所时,他会在地图上移动做事、收集物品等。玩家在做这些事时可能会失去或恢复健康。然后在游戏中出现了一个点,玩家可以离开庇护所并前往教堂(最终还有其他地方)。我希望能够仅在 Church 中使用 Shelter 中的同一播放器。因此,如果玩家在庇护所中失去 5 点生命值,当他去教堂时,他有 35 点生命值。
  • @TristanLuisSantiago,所有这些都可以使用 shared_ptr 来支持。
  • 谢谢@R Sahu。我一定会给他们一个机会!感谢您的帮助!
猜你喜欢
  • 2023-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-24
  • 1970-01-01
  • 2019-10-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多