朋友班中有朋友班的对象时的朋友班

时间:2020-11-09 14:08:16

标签: c++ class friend

标题似乎有些混乱,但是我会尽力解释。 我有一堂课CGameMode

#pragma once

#include <string>
#include <iostream>
#include "../Hero/Hero.h"
#include "../Weapon/Weapon.h"
#include "../Armor/Armor.h"

class CGameMode
{
private:
    CHero Hero;
    CWeapon Weapon;
    CArmor Armor;

    std::string FileName = "save.txt";
protected:

public:
    void InitializeGame();
    void CreateGame();
    void LoadGame();
    void SaveGame();
    CGameMode* GetGameMode() { return this; }
};

如您所见,该类包含以下类的对象:CHeroCWeaponCArmor。让我们看一下其中一个类:

#pragma once

#include "../Enemy/Enemy.h"
#include "../GameMode/GameMode.h"

class CHero : public CEnemy
{
private:
    int Energy = 0;
    int ExperiencePoints = 0;
    int Level = 0;

    friend class CGameMode;
protected:

public:
    CHero();
    CHero(std::string Name, int Health, int Energy, int ExperiencePoints, int Level);
};

最重要的是这一行代码:

friend class CGameMode;

CArmorCWeapon也是CGameMode类的朋友)。

问题是程序无法编译。但是,如果我从CGameMode类中删除 Hero 武器 Armor 成员,则程序将编译,并且一切正常。

所以问题是:如何使CGameMode类与CWeaponCArmorCHero成为朋友,同时,这些类的对象可以被CGameMode包含?

0 个答案:

没有答案