在 C++ 中,如何跨多个类文件访问声明的对象?

Posted

技术标签:

【中文标题】在 C++ 中,如何跨多个类文件访问声明的对象?【英文标题】:In C++, how do I access declared objects across multiple class files? 【发布时间】: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 【参考方案1】:

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

【讨论】:

这些字段已经可以通过 getter 函数访问

以上是关于在 C++ 中,如何跨多个类文件访问声明的对象?的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 C++ 中指向该数组的指针访问另一个类中的数组?

如何使用 create_all() 跨文件的 sqlalchemy orm 对象

如何创建一个可以操作同一类的多个对象的函数,访问 C++ 中的私有属性?

如何使用 PyObjects 声明 Boost.Python C++ 类

28静态对象(static)

在 C++ 中访问一个类的多个实例