从另一个类访问和更改类成员函数

时间:2011-05-06 15:27:30

标签: c++ class function variables member

我有三个课程,我试图为我的游戏链接在一起。我试图让它成为如果Player1踩到特定类型的Tile然后Player1的重力变量“AccelY”将改变提供升力的效果并垂直提升玩家。初始化类创建对象Player1。 (只有一个播放器,所以这可以应用于整个类)这包括CEntity.h和CPlayer.h的头文件通过CApp.h主控制器类。 CPlayer类是CEntity的子类。 Accel Y在CEntity中公开声明为没有初始值的浮点数。当播放器在那种类型的磁贴上时,我想在CPlayer中更改它。我在Tile.h文件中放了一个if语句,但我无法使用以下代码访问和更新该值?我最初尝试使用默认的类构造函数,但尝试使用如下函数。

CTILE.CPP

#include "CTile.h"
#include "CPlayer.h"

CTile::CTile(){

    TileID = 0;

    TypeID = TILE_TYPE_NONE;

    if(TypeID == TILE_TYPE_LIFT){   

        CPlayer::LiftTile(0.75f, 10.0f);
        //CPlayer::AccelY = 0.75f;
        //CPlayer.SpeedY = 2.0; 
    }
}

CPLAYER.H

public:

    CPlayer();

    void LiftTile(float x, float y);

CPLAYER.CPP

void CPlayer::LiftTile(float x, float y){

    SpeedY = x;
    AccelY = y;
}

3 个答案:

答案 0 :(得分:0)

除非成员或成员函数在该类中声明为static,否则您需要类的对象来访问其成员或调用其成员函数。

CPlayer::LiftTile(0.75f, 10.0f);

仅在CPlayer::LiftTile()声明为

时才有效
static void CPlayer::LiftTile(float x, float y); in `CPlayer` class

其他方法是通过创建LiftTitle()类的对象来调用CPlayer,你必须做这样的事情:

CTile::CTile()
{
    TileID = 0;

    TypeID = TILE_TYPE_NONE;

    if(TypeID == TILE_TYPE_LIFT)
    {   
        CPlayer obj;
        obj.LiftTile(0.75f, 10.0f);
        //obj.AccelY = 0.75f;  //works if AccelY is declared as public member
        //obj.SpeedY = 2.0;    //works if SpeedY is declared as public member
    }
}

答案 1 :(得分:0)

如果要使用类访问说明符AccelY访问CPlayer::AccelY,则需要将变量声明为static

class CPlayer {
  static float AccelY;
};

答案 2 :(得分:0)

如果您使用

,则有效
Player1.LiftTile(0.75f, 10.0f);

因为它调用了特定播放器的功能。