如何从另一个类访问函数?

Posted

技术标签:

【中文标题】如何从另一个类访问函数?【英文标题】: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,只是有自己的名字。 【参考方案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++ 说没有在这个范围内声明=/)

以上是关于如何从另一个类访问函数?的主要内容,如果未能解决你的问题,请参考以下文章

如何从另一个 UIView 类访问 UIControl 的值

访问从另一个类调用的函数中的变量

如何在c#中访问另一个类中的一个类的私有函数?

Angular2从另一个类访问函数/变量

在不事先了解特定成员函数的情况下从另一个类访问成员函数

QT QML - 从另一个类访问 qml 模型