无法访问静态函数内的私有变量

问题描述 投票:1回答:1

我正在尝试制作一个小型迷你游戏,其中class Hero使用class Enemyfriendvariables交互,但代码无法编译并给我前向声明错误

#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,因为它预先编译了构建

c++ class oop static friend
1个回答
3
投票

这里有两个主要问题。

首先,在定义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);
© www.soinside.com 2019 - 2024. All rights reserved.