我正在尝试制作一个相当大的电子游戏,我目前处理鼠标输入的方法是将mouseX, mouseY和enum mouseState作为参数传递给每个需要鼠标知识的单个对象的更新函数。这是相当混乱的,我想通过将鼠标变量放在一个名为Input的名称空间中来使它们更加全局化,以便我可以使用Input::mouseX等来访问它们。
现在,名称空间Input存在于Input.h(下面的内容)
#pragma once
#include "allegro5allegro.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(){...''
在主循环对象的头文件Core.h中包含Input.h后,链接器会抛出一个错误,因为在它看来,Input.h中包含的所有内容现在都是一个Multiply Defined Symbol。显然,我对头文件的使用有问题,因为据我所知,我在使用名称空间方面没有犯任何明显的错误,而且LNK2005的错误代码前缀似乎暗示了链接器(?)。
如果有人能对我的困境提出一些建议,我将不胜感激
声明变量为extern
:
// header file:
namespace Input {
extern int mouseX;
}
// implementation
#include "input.h"
namespace Input {
int mouseX;
}