我正在尝试制作一个小型迷你游戏,其中 class Hero
使用 friend
与 class Enemy
变量交互,但代码无法编译并给我前向声明错误
#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
因为它预编译构建
最佳答案
这里有两个主要问题。
首先,在定义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);
关于c++ - 无法访问静态函数内部的私有(private)变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55015298/