调用函数从类返回私有变量不起作用
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ᵩ:没错。如果有两个Player
s,每个人都需要自己计算他们拥有的药水数量。所以它应该不是静态的。
好的,我已经改变了它,所以它不再是静态的了,但是我现在怎么称呼它呢?
当询问无法编译的内容时,您应该提供编译器错误和行。
【参考方案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()不起作用[重复]