使用成员函数在类中设置POINT2f / VECTOR2f变量的x或y

时间:2016-09-29 02:21:14

标签: c++ vector member mutators

我有以下课程:

//----------------------------------------------------------------------
//                              CHARACTER CLASS
//----------------------------------------------------------------------
class Character
{
private:
    POINT2f char_position;

public:
    VECTOR2f char_velocity;

    Character();
    ~Character();

    // Mutators
    void SetChar_Position(POINT2f p);
    void SetChar_Velocity(VECTOR2f v);

    // Accessors
    POINT2f GetChar_Position();
    VECTOR2f GetChar_Velocity();
};

//----------------------------------------------------------------------
//          PLAYER CLASS - INHERITED FROM "CHARACTER" CLASS
//----------------------------------------------------------------------
class Player : public Character
{
private:

public:
int health;

Player();
~Player();

void SetPlayer_Health(int h);

int GetPlayer_Health();
};

所以玩家类基本上都是从角色类继承的。

Character类具有成员函数,可以设置字符位置和速度,它们包含POINT2f和VECTOR2f。

在我的主要代码中,我创建一个玩家角色Player Player1,然后在按下按钮时设置球的速度和位置:

if (ui.isActive('A'))   // Check to see if "A" key is pressed
    {
        // Player Ball
        Player1.SetChar_Velocity.x = -12.0;
        Player1.SetChar_Position.x += (Player1.GetChar_Velocity.x*dt);
        Player1.SetChar_Velocity.x += (acceleration*dt);
    }

我目前收到的错误是left of .x must have class/struct/union,因此我将Player1.SetChar_Velocity.x = -12.0;更改为Player1.SetChar_Velocity().x = -12.0;,而不是错误expression must have class typeto few arguments in function call

有没有人知道一种方法,只允许我操纵char_velocity的x号。我也理解我的代码Set .x速度是不正确的,因为我没有传递VECTOR2f值。

1 个答案:

答案 0 :(得分:0)

为了实现您想要的目标,您需要将Get_方法的返回类型作为参考(wiki)。您的代码将如下所示

class Character
{
private:
    POINT2f char_position;

public:
    VECTOR2f char_velocity;

    // Accessors
    POINT2f& GetChar_Position() { return char_position; }
    VECTOR2f& GetChar_Velocity() { return char_velocity; }
};

此外,通常建议或要求能够在代码中保留const-correctness,因此您可能想要添加

const POINT2f& GetChar_Position() const { return char_position; }
const VECTOR2f& GetChar_Velocity() const { return char_velocity; }

这将允许您进行一些调用,如

POINT2f current_pos = a_char.GetChar_Position(); // const 
a_char.GetChar_Velocity().x += 2;                // non-const

请注意,通常建议将结构作为const引用而不是副本传递(尽管这可能不适用,具体取决于您的c ++版本和类型,您可以看到this question进行说明),因此更改你的

void SetChar_Position(POINT2f pos) { char_position = pos; }
void SetChar_Velocity(VECTOR2f vel) { char_velocity = vel; }

void SetChar_Position(const POINT2f& pos) { char_position = pos; }
void SetChar_Velocity(const VECTOR2f& vel) { char_velocity = vel; }