我有以下课程:
//----------------------------------------------------------------------
// 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 type
和to few arguments in function call
有没有人知道一种方法,只允许我操纵char_velocity
的x号。我也理解我的代码Set
.x速度是不正确的,因为我没有传递VECTOR2f
值。
答案 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; }