【问题标题】:Calling function to return private variable from class not working调用函数从类返回私有变量不起作用
【发布时间】:2012-10-13 01:36:11
【问题描述】:

所以我正在用 C++ 制作一个小游戏,但我遇到了一个问题。我的 player.h 文件中有一个名为 player 的类,在这个类中我有一个名为 getPotion() 的公共函数。我还有一个名为potion 的私有静态变量。我对球员的健康也有同样的看法,getHealth() 函数完美地返回了私有静态 int playerHealth。但显然没有理由,getPotion 函数不会返回药水。我得到一个错误。我还在所有其他文件中包含了头文件。

代码如下:

(对不起,我不知道怎么插入代码,所以我必须写出来)

player.h(我遇到问题的代码):

class Player{
private:
    static int potions;

public:
    int getPotions();
}

player.cpp(又是我遇到问题的代码):

int Player::potions;

int Player::getPotions(){
    Player player;
    return player.potions;
}

我可能遗漏了一些代码,比如return之类的,但那是因为我有很少的时间来问这个问题,所以我把与我的问题相关的部分。

【问题讨论】:

  • 为什么要在getPotions函数中新建Player?无论是什么思维过程让你认为这是明智的做法,都需要重新审视。
  • 另外,您几乎可以肯定希望将potions 声明为static
  • @Robᵩ:没错。如果有两个Players,每个人都需要自己计算他们拥有的药水数量。所以它应该是静态的。
  • 好的,我已经改变了它,所以它不再是静态的了,但是我现在怎么称呼它呢?
  • 当询问无法编译的内容时,您应该提供编译器错误和行。

标签: c++


【解决方案1】:

首先,您试图返回一个类的static 成员,就好像它是对象的实例化成员一样。静态成员由Class::member 引用,而不是object.member

其次,我认为您不希望 potions 是静态的。静态成员在类的所有对象之间共享。因此,如果玩家 A 有 100 个生命药水,那么玩家 B 将拥有相同的 100 个生命药水。

第三,您在 .cpp 文件的顶部声明 Player::potions。我不认为那是你想要的。 potions 成员已在您的 .h 文件中声明。

播放器.h:

class Player
{
    private:
        int potions;

    public:
        int getPotions();
};

播放器.cpp:

int Player::getPotions()
{
    return potions;
}

如果您确实希望 potions 是静态的,请将其更改为:

return Player::potions;

【讨论】:

    【解决方案2】:

    尝试改变

    Player player;
    return player.potions;
    

    简单

    return potions;
    

    您正在创建一个新玩家并返回那个对象的药水,而不是“这个”对象的药水。

    【讨论】:

    • potions 是静态的。他的类的设计方式,实例没有药水。
    • @DavidSchwarts,是的,这也需要修复。我的疏忽。
    猜你喜欢
    • 2017-08-08
    • 2016-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-23
    • 1970-01-01
    • 2018-07-18
    相关资源
    最近更新 更多