Введение
Я новичок в C ++, имейте это в виду, пытаясь объяснить свою проблему.
Я делаю игру на C ++, чтобы помочь мне лучше понять язык и пока я делал этот проект, я решил, что мне нужны события (например, C# события), чтобы помочь мне с этим проектом, и после некоторых исследований я обнаружил, что C ++ не имеет системы обработчика событий, подобной C# один, поэтому я попытался сделать что-то, что работало так же, как обработчик событий C#.
В файле Main. cpp я создал это:
typedef void(*KeyPressedFunction)(sf::Keyboard::Key);
std::vector<KeyPressedFunction> keyPressedEvent;
int main()
{
while (window.isOpen())
{
sf::Event event;
while (window.pollEvent(event))
{
switch (event.type)
{
case sf::Event::Closed:
window.close();
break;
case sf::Event::KeyPressed:
for (KeyPressedFunction func : keyPressedEvent)
{
func(event.key.code);
}
break;
}
}
}
}
Идея состоит в том, что каждый класс, который хотел знать, когда была нажата клавиша, собирался подписаться на событие (push_back
на вектор keyPressedEvent
), и когда клавиша нажимается, каждая система будет иметь эту информацию.
Проблема
После того, как я проверил систему в основном файле. cpp (создание функции и возврат к вектору keyPressedEvent
), я заметил, что она работает нормально, тестовые функции, которые я создал был c все правильно, поэтому я решил реализовать в остальной части системы, что означает ... в других единицах перевода.
Вот что я сделал:
Pacman .h Файл:
typedef void(*KeyPressedFunction)(sf::Keyboard::Key);
extern std::vector<KeyPressedFunction> keyPressedEvent;
class Pacman
{
public:
Pacman(float x, float y);
void OnKeyPressed(sf::Keyboard::Key key);
};
Pacman. cpp Файл:
#include "Pacman.h"
#include <iostream>
void Pacman::OnKeyPressed(sf::Keyboard::Key key)
{
}
Pacman::Pacman(float x, float y)
{
keyPressedEvent.push_back(*OnKeyPressed);
}
Линия, которая вызывает все проблемы, keyPressedEvent.push_back(*OnKeyPressed);
этот, хотя я делаю то же самое, что и при тестировании «системы событий» раньше.
Ошибка: «Операнд '*' должен быть указатель "
Я думаю, что эта ошибка каким-то образом связана с вектором, находящимся в другой единице перевода, но я не знаю, как ее решить.