SDL2 因 InputHandler 鼠标移动而崩溃
Posted
技术标签:
【中文标题】SDL2 因 InputHandler 鼠标移动而崩溃【英文标题】:SDL2 crash whit InputHandler mouse motion 【发布时间】:2014-05-06 20:18:30 【问题描述】:没有警告,没有错误。编译正常,但在 update 函数的底部,以下几行会使程序崩溃:
(*m_mousePosition).setX(event.motion.x);
(*m_mousePosition).setY(event.motion.y);
这是完整的代码:
#include <SDL2/SDL.h>
#include <vector>
#include "Vector2D.h"
using namespace std;
#ifndef INPUTHANDLER_H
#define INPUTHANDLER_H
enum mouse_buttons
LEFT = 0,
MIDDLE = 1,
RIGHT = 2
;
class InputHandler
public:
static InputHandler* Instance()
if(s_pInstance==0)
s_pInstance= new InputHandler();
return s_pInstance;
void update()
if(event.type == SDL_MOUSEBUTTONDOWN)
if(event.button.button == SDL_BUTTON_LEFT)
m_mouseButtonStates[LEFT]=true;
if(event.button.button == SDL_BUTTON_MIDDLE)
m_mouseButtonStates[MIDDLE]=true;
if(event.button.button == SDL_BUTTON_RIGHT)
m_mouseButtonStates[RIGHT]=true;
if(event.type == SDL_MOUSEBUTTONUP)
if(event.button.button == SDL_BUTTON_LEFT)
m_mouseButtonStates[LEFT]=false;
if(event.button.button == SDL_BUTTON_MIDDLE)
m_mouseButtonStates[MIDDLE]=false;
if(event.button.button == SDL_BUTTON_RIGHT)
m_mouseButtonStates[RIGHT]=false;
if(event.type == SDL_MOUSEMOTION)
(*m_mousePosition).setX(event.motion.x);
(*m_mousePosition).setY(event.motion.y);
SDL_Event* getEvent()
return &event;
void clear();
bool getMouseButtonStates(int buttonNumber)
return m_mouseButtonStates[buttonNumber];
Vector2D* getMousePosition()
return m_mousePosition;
private:
SDL_Event event;
vector<bool> m_mouseButtonStates;
Vector2D* m_mousePosition;
InputHandler()
for(int i=0; i<3; i++)
m_mouseButtonStates.push_back(false);
~InputHandler()
static InputHandler* s_pInstance;
;
typedef InputHandler TheInputHandler;
#endif /* INPUTHANDLER_H */
也许是指针的问题,但我不知道,我无法解决
===============================新编辑=============== ========================
现在我不使用指针,但我必须用两个参数初始化Vector2D
。我把它放在InputHandler
构造函数中:
InputHandler::InputHandler():m_position(0,0)
for(int i=0; i<3; i++)
m_mouseButtonStates.push_back(false);
并给我以下错误:
InputHandler.cpp:12:30: error: member initializer 'm_position' does not name a non-static data member or base class
InputHandler::InputHandler():m_position(0,0)
^~~~~~~~~~~~~~~
Vector2D
类的定义:
#include<math.h>
using namespace std;
#ifndef VECTOR2D_H
#define VECTOR2D_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);
private:
float m_x;
float m_y;
;
#endif /* VECTOR2D_H */
【问题讨论】:
有什么问题?您想知道它为什么崩溃或如何防止它崩溃吗? 你的 m_position 是多少?我没有看到它声明,所以很难说是什么问题 我解决了这个问题。只在构造函数中声明指针。 @jofra 变量 m_position 它是在基类中声明的 Vector2D 变量。 【参考方案1】:是的,问题在于您所说的“指针”。
m_mousePosition
已声明,但您从未为其分配任何内容,因此它是 NULL/垃圾。
你可能不需要在这里使用指针。
【讨论】:
我换个问题。抱歉,我无法将其放在评论中以上是关于SDL2 因 InputHandler 鼠标移动而崩溃的主要内容,如果未能解决你的问题,请参考以下文章