【问题标题】:How to access function from another class?如何从另一个类访问函数?
【发布时间】:2014-02-04 09:47:26
【问题描述】:

可能是愚蠢的问题,但我找不到答案(即使在这里)。

我已将所有课程拆分为单独的文件 (cpp+h)。我有像getValue()setValue() 这样的方法。我有一个名为 Player 的类(这基本上是具有整数个变量的数据库)。我创建了一个名为 player (Player *player = new Player;) 的对象。现在我需要从任何其他类(在另一个文件中分离)访问这个对象。问题是我什至无法访问getValue() / setValue() 方法。

我需要的是类似于 Delphi From1.player.item[0]=3 从表格 2 中访问,记录播放器的地方。

更新:

这是我的代码:

播放器.cpp

#include "player.h"
#include "gameform.h"

Player::Player()
{
}

void Player::check(){
    //I should be able to check if player dead or not from my Battle class
}

播放器.h

#ifndef PLAYER_H
#define PLAYER_H

class Player
{
public:
    Player();
    void check();
};

#endif // PLAYER_H

Battle.cpp

#include "battle.h"
#include "player.h"
#include "game.h"

Battle::Battle()
{
}

void Battle::hit(){
//if I hit I should check am I dead yet
    player.check();
}

这就是 Player 在 Game 类中声明的方式(现在):

Player *player = new Player;

在任何函数之外,就在课堂上。

其中玩家是对象,在 Game 类中创建。一切都是公开的。

*我什至尝试在 main.cpp 中创建对象(在 main() 函数内外),但没有任何效果,奇怪 =/

这是 github "temp" 分支,正在编译和工作。但是如何访问播放器? :)

https://github.com/ewancoder/game/tree/temp

UPD:另一个愚蠢的问题:如果我希望在我的 1 类函数中负责打开文件和另一个 - 用于编辑和关闭文件,如果无法从另一个函数读取变量,我该怎么做?

【问题讨论】:

  • 你遇到了什么错误?
  • 发布您的Player 声明。看来您的方法都是私有的。访问this 很奇怪。你的意图是什么?
  • 这是player.check(),而不是player.check。这是一个不带参数的函数,由() 表示。
  • player 是否在 Battle 类中声明?你可以为Battle 发布你的班级声明吗?
  • 玩家在 Game 类中声明(它包含在 Battle 中),并且 Battle 应该能够访问 Game。 Battle.h 看起来就像 player.h,只是有自己的名字。

标签: c++ function class methods


【解决方案1】:

我不确定你想要什么,但如果你有这样的课程:

a.hpp

Class A {
    public:
       void foo();
};

a.cpp

#include "a.hpp"
void A::foo() {}

你可以这样使用它:

b.hpp

#include "a.hpp"
class B {
   public:
      void stuff(A& a);
};

b.cpp

#include "b.hpp"
void B::stuff(A& a) { a.stuff(); }

【讨论】:

    【解决方案2】:

    您需要为另一个对象提供第一个对象的引用。直接在构造函数中或稍后通过方法。

    或者您也可以将播放器存储在全局变量中并通过全局变量访问它。

    问题在于方法绑定到对象的特定实例 - 因此您需要该实例来调用它们

    【讨论】:

    • 是的,有点不清楚,我的意思是你可以将其设为全局 - 然后你可以从任何地方访问变量
    【解决方案3】:

    您需要在语句末尾添加括号并使用-> 运算符,而不是. 运算符:player->check()

    这是因为它是指向对象Player *player 的指针,而不是对象本身Player player

    【讨论】:

    • 对不起,我的错,只是错字。无论如何,一切都写得很完美,我什至尝试过 -> 和 :: 变体。我需要一些我不知道的 c++ 方法才能让它工作。
    • 使用:: 操作符将使用没有对象的方法
    【解决方案4】:

    您的问题有点难以理解,一些答案反映了这一点。但是,在我看来,您遇到的实际上是系统设计中至关重要的部分。有很多策略,也有很多考虑因素,但基本上由你来设计对象可以访问运行程序中其他对象内容的路径。

    一些常见的技术包括 全局变量

    extern Player *PlayerOne;
    PlayerOne->item[0]=3;
    

    类中的静态变量(或集合)。

    class Player {
    public:
    Player* Players;
    }
    
    Player::Players[0]->item[0]=3;
    

    成员变量。

    Board.Add(new Player(Board));
    
    Board.m_player->item[0]=3;
    

    变化无穷无尽。如果需要特定代码,则需要更具体。

    【讨论】:

    • 现在我认为就是这样,尝试了 extern 变量 - 没有任何效果,即使我放了 extern Player *PlayerOne;在 main.cpp 中。我不能从另一个类中做 PlayerOne->item(c++ 说没有在这个范围内声明=/)
    猜你喜欢
    • 2021-11-11
    • 1970-01-01
    • 2020-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-03
    • 1970-01-01
    相关资源
    最近更新 更多