因此,我跟随Shaun Mitchell撰写了一本名为SDL Game Development的书。我已经用书中的代码遇到了一些小问题,但到目前为止我已经能够自己解决并纠正这个问题,但这个问题让我陷入困境。
该程序编译良好,但崩溃时出现seg故障。
这是本书给我写的Vector2D课程:
#ifndef __Vector2D__
#define __Vector2D__
#include <math.h>
class Vector2D
{
public:
Vector2D(float x, float y) : m_x(x), m_y(y) {}
float getX() { return m_x; }
float getY() { return m_y; }
void setX(float x) { m_x = x; }
void setY(float y) { m_y = y; }
float length() { return sqrt(m_x * m_x + m_y * m_y); }
Vector2D operator+(const Vector2D& v2) const
{
return Vector2D(m_x + v2.m_x, m_y + v2.m_y);
}
friend Vector2D& operator+=(Vector2D& v1, const Vector2D& v2)
{
v1.m_x += v2.m_x;
v1.m_y += v2.m_y;
return v1;
}
Vector2D operator*(float scalar)
{
return Vector2D(m_x * scalar, m_y * scalar);
}
Vector2D& operator*=(float scalar)
{
m_x *= scalar;
m_y *= scalar;
return *this;
}
Vector2D operator-(const Vector2D& v2) const
{
return Vector2D(m_x - v2.m_x, m_y - v2.m_y);
}
friend Vector2D& operator-=(Vector2D& v1, const Vector2D& v2)
{
v1.m_x -= v2.m_x;
v1.m_y -= v2.m_y;
return v1;
}
Vector2D operator/(float scalar)
{
return Vector2D(m_x / scalar, m_y / scalar);
}
Vector2D& operator/=(float scalar)
{
m_x /= scalar;
m_y /= scalar;
return *this;
}
void normalize()
{
float l = length();
if (l > 0)
{
(*this) *= 1 / 1;
}
}
private:
float m_x;
float m_y;
};
#endif // __Vector2D__
这是一个播放器类&#39;程序开始崩溃的输入处理事件:
void Player::handleInput()
{
Vector2D* vec = TheInputHandler::Instance()->getMousePosition();
m_velocity = (*vec - m_position) / 100;
}
它在m_velocity =(* vec - m_position)/ 100时崩溃;这当然追溯到我的Vector2D课程&#39;操作符 - 。 m_velocity和m_position都是Vector2D。替换 - with +会产生相同的崩溃。
对于可能出错的任何帮助都将非常感激。
答案 0 :(得分:-3)
Vector2D* vec = TheInputHandler::Instance()->getMousePosition();
你把它作为指针,但从未为它分配内存。 (除非这就是那个功能的作用..?)
如果您不打算将它传递到任何地方,则无需将其作为指针。