I created a singleton containing a map of string
,bool
pairs for storing when a key is pressed on the keyboard.
I have the following header file:
#pragma once
#include <unordered_map>
#include <iostream>
#include <string>
using namespace std;
// Singleton service that stores keypresses during frame
class KeyboardService
{
private:
static KeyboardService* instance;
unordered_map<string, bool> keys =
{
{"up", 0},
{"down", 0},
{"left", 0},
{"right", 0},
{"one", 0},
{"two", 0},
{"three", 0},
{"d", 0}
};
KeyboardService(){};
public:
static KeyboardService* getInstance();
bool isPressed(string input);
void pressKey(string input);
void unpressKey(string input);
};
And implementation:
#pragma once
#include "keyboard_service.hpp"
KeyboardService* KeyboardService::instance = 0;
unordered_map<string, bool> keys;
KeyboardService* KeyboardService::getInstance()
{
if(!instance)
{
instance = new KeyboardService;
}
return instance;
}
bool isPressed(string input)
{
return keys[input];
}
void pressKey(string input)
{
keys[input] = 1;
}
void unpressKey(string input)
{
keys[input] = 0;
}
When I try to use these functions, I get an error:
"KeyboardService::isPressed(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >)", referenced from:
UserInputSystem::update(float) in user_input_system.cpp.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)