无法访问静态函数内部的私有变量
Posted
技术标签:
【中文标题】无法访问静态函数内部的私有变量【英文标题】:Unable to access private variables inside of static functions 【发布时间】:2019-03-06 03:54:36 【问题描述】:我正在尝试制作一个小型迷你游戏,其中 class Hero
使用 class Enemy
variables 与 friend
交互,但代码无法编译并给我前向声明错误
#include <iostream>
class Enemy;
class Hero
friend class Enemy;
private:
static int hp, power;
public:
Hero *h1;
Hero ()
hp = 50;
power = 10;
static void attackEnemy (Enemy *e1, Hero *h1);
;
static void Hero::attackEnemy(Enemy *e1, Hero *h1)
e1->hp -= h1->power;
class Enemy
friend class Hero;
private:
static int hp, power;
public:
Enemy ()
hp = 15;
power = 10;
void attackHero ();
;
int main ()
Enemy *e1 = new Enemy ();
Hero *h1 = new Hero ();
h1->attackEnemy(Enemy *e1, Hero *h1);
return 0;
我被告知 static
函数和变量能够防止此错误,因为它们是 global
,因为它预编译了构建
【问题讨论】:
【参考方案1】:这里有两个主要问题。
首先,在定义Hero::attackEnemy
时,static
限定符在这里无效。该成员已经在类定义中声明为static
,所以这里也不需要应用它。
其次,在Hero::attachEnemy
被定义的时候,Enemy
类还没有被定义。您需要将Hero::attachEnemy
的定义移动到 class Enemy
的定义之后。
class Enemy;
class Hero
...
;
class Enemy
...
;
void Hero::attackEnemy(Enemy *e1, Hero *h1)
e1->hp -= h1->power;
另外,这不是一个有效的函数/方法调用:
h1->attackEnemy(Enemy *e1, Hero *h1);
你想要:
h1->attackEnemy(e1, h1);
【讨论】:
只是一个小而重要的更正,...该成员已被声明为静态(未定义为您写的) @dsp_user 谢谢。已编辑。以上是关于无法访问静态函数内部的私有变量的主要内容,如果未能解决你的问题,请参考以下文章