如何从另一个类访问函数?
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++ 说没有在这个范围内声明=/)以上是关于如何从另一个类访问函数?的主要内容,如果未能解决你的问题,请参考以下文章