运营商超载崩溃

时间:2015-07-27 19:23:48

标签: c++

因此,我跟随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 +会产生相同的崩溃。

对于可能出错的任何帮助都将非常感激。

1 个答案:

答案 0 :(得分:-3)

Vector2D* vec = TheInputHandler::Instance()->getMousePosition();

你把它作为指针,但从未为它分配内存。 (除非这就是那个功能的作用..?)

如果您不打算将它传递到任何地方,则无需将其作为指针。