希望有人可以帮助我解决这个非常微不足道的错误,我不知道如何继续:)
这是头文件:
#ifndef __InputHandler__
#define __InputHandler__
#include "SDL.h"
#include <SDL_image.h>
#include <vector>
#include <iostream>
enum mouse_buttons {
LEFT = 0,
MIDDLE = 1,
RIGHT = 2,
};
class InputHandler {
public:
bool getMouseButtonState(int buttonNumber) {
return m_mouseButtonStates[buttonNumber];
}
std::vector<bool> m_mouseButtonStates;
static InputHandler* Instance() {
if (s_pInstance == 0) {
s_pInstance = new InputHandler();
}
return s_pInstance;
}
void update();
void clean();
private:
InputHandler();
~InputHandler() {}
static InputHandler* s_pInstance;
};
#endif
我在另一个类定义Player.cpp中调用InputHandler :: Instance()函数
#include "InputHandler.h"
void Player::handleInput() {
if (InputHandler::Instance()->getMouseButtonState(LEFT)) {
m_velocity.setX(1);
}
}
这是我得到的错误:
Player.obj : error LNK2001: unresolved external symbol
"private: static class InputHandler * InputHandler::s_pInstance"
老实说,我不知道发生了什么以及错误指向了什么。真的非常感谢你的智慧:)))
答案 0 :(得分:1)
&#34;老实说,我不知道发生了什么以及错误指向的是什么。 &#34;
链接器错误消息几乎告诉您缺少什么
您目前遇到的问题是,您是否缺少翻译单元中static InputHandler* s_pInstance;
成员的定义。它应该是这样的:
InputHandler* InputHandler::s_pInstance = 0;
虽然你对单身模式的态度有一些缺陷和不足(特别是关于线程安全性)。您应该像这样简化singleton pattern:
static InputHandler& Instance() {
static InputHandler theInputHandler;
return theInputHandler;
}
或者如果你坚持使用指针
static InputHandler* Instance() {
static InputHandler theInputHandler;
return &theInputHandler;
}
这通常被称为&#39; Scott Meyer的单身成语&#39; ,这里有关于原始推理的更多信息;