Я пытаюсь создать довольно большую видеоигру, и мой текущий метод обработки ввода с мыши - передать mouseX, mouseY и enum mouseState в качестве аргументов функции обновления КАЖДОГО отдельного объекта, который требует знания мыши. Это довольно грязно, и я хочу сделать переменные мыши более глобальными, поместив их в пространство имен с именем Input, чтобы я мог получить к ним доступ с помощью Input :: mouseX и др.
В нынешнем виде пространство имен Input существует в Input.h (содержимое ниже)
#pragma once
#include "allegro5\allegro.h"
#include "J_Enum.h"
namespace Input{
ALLEGRO_EVENT_QUEUE *inputQueue;
int mouseX;
int mouseY;
MOUSE_STATE mouseState;
void setUpInput();
void updateInput();
};
и две функции-члена определены в Input.cpp
#include "Input.h"
void Input::setUpInput(){...declaration
void Input::updateInput(){...''
После включения Input.h в заголовок объекта основного цикла Core.h компоновщик генерирует шипение, потому что в его глазах все, что включено в Input.h, теперь является символом с многократным определением.
Очевидно, что что-то не так с моим использованием файлов заголовков, потому что, насколько я знаю, я не допустил каких-либо явных ошибок при использовании пространств имен, а префикс кода ошибки LNK2005, похоже, подразумевает компоновщик (?).
Если кто-нибудь сможет пролить свет на мою дилемму, я был бы очень признателен