调用函数从类返回私有变量不起作用

Posted

技术标签:

【中文标题】调用函数从类返回私有变量不起作用【英文标题】: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,每个人都需要自己计算他们拥有的药水数量。所以它应该是静态的。 好的,我已经改变了它,所以它不再是静态的了,但是我现在怎么称呼它呢? 当询问无法编译的内容时,您应该提供编译器错误和行。 【参考方案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,是的,这也需要修复。我的疏忽。

以上是关于调用函数从类返回私有变量不起作用的主要内容,如果未能解决你的问题,请参考以下文章

当在另一个页面上调用类时,私有函数__construct()不起作用[重复]

JavaScript数学函数不起作用并返回Nan

jquery/jquery 移动插件 - 小部件 - 调用私有方法不起作用

C++ 友元函数不起作用,在此上下文中为私有错误

添加到私有变量不起作用

为啥在返回字符串的函数上调用 c_str() 不起作用?