如何使名称空间的内容对整个项目可用而不产生“多重定义符号”错误
How can contents of a namespace be made available to an entire project without generating Multiply Defined Symbol errors?
我正在尝试制作一个相当大的电子游戏,我目前处理鼠标输入的方法是将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;
}
相关文章:
- 使用命名空间时出现多个定义错误
- 对C宏的未定义引用,但在定义它时会出现重新定义错误
- 尝试调用 .h 文件中定义的变量时出现变量未定义错误
- 在头文件和 cpp 文件中使用一次 #pragma 时出现结构重定义错误
- 链接阶段出现多重定义错误
- 避免模板类中的重定义错误
- 即使我没有包含多个文件,C++中的多个定义错误
- 跨多个类的全局变量而不会出现重定义错误?
- 尝试运行 wasm 函数时出现模块未定义错误
- C++ 预期的左大括号以及重定义错误
- C++:成员的越界声明必须是纯虚函数的定义错误
- c++中数组的未定义错误
- Visual C:模板类中的自定义错误消息
- 为什么C++模板不会导致多个定义错误?
- 只有一个定义/声明时标头声明变量的多堆定义错误
- C++ 在多个其他类中使用单个类 - 编译时出现多个定义错误
- 基类未定义.错误 C2504
- Q 斯坦达项重定义错误
- 可视化C++中的结构定义错误
- VC++ C2011 重定义错误 - 未使用的头文件