c++ - 无法访问静态函数内部的私有(private)变量

标签 c++ class oop static friend

我正在尝试制作一个小型迷你游戏,其中 class Hero 使用 friendclass 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/

相关文章:

c++ - 在静态函数c++中获取类的类型

python - 是否可以在不实例化类的情况下导入类方法?

C++ 检查两个字符串内容效率

c++ - 调试断言失败 : _BLOCK_TYPE_IS_VALID

c++ - 调用变量的类中的构造函数

c++ - 定义类时,公共(public)成员变量存放在哪里?

Java监听器实现

c++ - IsBadStringPtr 替代项

c++ - 将 NativeAPI 与 Visual Studio 结合使用

c++ - 分配抽象类类型 'Shape' 的对象?