【问题标题】:In C++, how do I access declared objects across multiple class files?在 C++ 中,如何跨多个类文件访问声明的对象?
【发布时间】:2021-11-23 19:55:34
【问题描述】:

我没有包含 Player.h 文件或 .cpp 文件,因为它们与我的 Monster.h 和 .cpp 文件完全相同。

我正在制作一个游戏,并在我的 Login.cpp 文件中创建了一个玩家对象,该对象将用户名和一个 int 作为参数。有没有办法在我的 BattleSystem.cpp 文件中访问我的 BattleStats() 函数中的对象参数?我的目标是最终在玩家被怪物击中时更新参数并输出这些更新的参数。

这是我的代码,谢谢你的帮助:

Main.cpp

#include "Login.h"
#include "GameManager.h"
#include "BattleSystem.h"

#include <iostream>

using namespace std;

int main() {
    BattleSystem bs;
    GameManager gm(&bs);
    Login login(&gm);

    login.StartMenu();
    cout << "ENDING" << endl;

    system("pause"); //Pause console.
    return 0; //Terminated without errors.
}

登录.h

    #pragma once
    
    #include "GameManager.h"
    #include <iostream>     
    
    using namespace std;
    
    class Player;
    class GameManager;
    class Login {
    public:
        Login(GameManager* gmPtr) : manager(gmPtr) {}
        void StartMenu();
    
    private:
        string username = "Kujo";
        Player* player;
        GameManager* manager;
    
    };

登录.cpp

#include "Login.h"              
#include "Player.h"
#include "GameManager.h"

void Login::StartMenu() {
    player = new Player(username, 100);
    manager->GameStart();

}

GameManager.h

#pragma once

class BattleSystem;
class GameManager {
public:
    GameManager(BattleSystem* bsPtr) : battle(bsPtr) {}
    void GameScenario();
    
private:
    int level = 1;
    BattleSystem* battle;

};

GameManager.cpp

#include "BattleSystem.h"
#include "Login.h"
#include "GameManager.h"

void GameManager::GameScenario() {
    battle->Encounter();

}

BattleSystem.h

#pragma once

class Player;
class Monster;
class BattleSystem {
public:
    void Encounter();
    void BattleStats();

private:
    Monster* monster;
    Player* player;

};

BattleSystem.cpp

#include "Player.h"
#include "Monster.h"
#include "BattleSystem.h"

void BattleSystem::Encounter() {
        monster = new Monster("Mini Orc", 100);
        cout << "A " << monster->GetName() << " has appeared!" << endl;
        BattleStats();
}

void BattleSystem::BattleStats() {
    cout << "Monster name: " << monster->GetName() << endl;
    cout << "Monster HP: " << monster->GetHP() << endl << endl;
    cout << "Player name: " << "PLAYER NAME HERE" << endl;
    cout << "Player HP: " << "PLAYER HP HERE" << endl << endl;
}

怪物.h

#pragma once

#include <string>
#include <iostream>

using namespace std;

class Monster {
public:
    Monster();
    Monster(string monsterName, int health);

    void SetName(string monsterName);
    void SetHP(int health);

    string GetName() const;
    int GetHP() const;

private:
    string name = "Monster";
    int healthPoints = 0;

};

怪物.cpp

#include "Monster.h"

Monster::Monster() : name("Player"), healthPoints(0) {}

Monster::Monster(string monsterName, int health) {
    name = monsterName;
    healthPoints = health;
}

void Monster::SetName(string monsterName) {
    name = monsterName;
}
void Monster::SetHP(int health) {
    healthPoints = health;
}

string Monster::GetName() const {
    return name;
}

int Monster::GetHP() const {
    return healthPoints;
}

【问题讨论】:

  • 一般来说,我想你是在问“如何让一个对象知道另一个对象的存在?”准确吗?
  • 我的朋友,这很容易。您需要将玩家指针传递给经理的战斗系统以在其中设置玩家属性,然后您可以在战斗系统中使用该玩家来显示其统计数据
  • 你能展示一下它的外观以及我如何在我的战斗系统中调用它吗? @MohammedIbrahim

标签: c++ c++17


【解决方案1】:

尝试将friend BattleSystem 插入到您的 Player 类中。 然后您将可以从 BattleSystem 访问 Player 的私有字段。

【讨论】:

  • 这些字段已经可以通过 getter 函数访问
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-26
  • 1970-01-01
  • 2019-11-21
  • 2023-02-04
  • 1970-01-01
  • 1970-01-01
  • 2018-10-16
相关资源
最近更新 更多