1

我正在尝试制作一个相当大的视频游戏,我当前处理鼠标输入的方法是将 mouseX、mouseY 和枚举 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 的错误代码前缀似乎暗示了链接器(?)。

如果有人可以阐明我的困境,我将不胜感激

4

1 回答 1

2

将变量声明为extern

// header file:
namespace Input {
  extern int mouseX;
}

// implementation
#include "input.h"
namespace Input {
  int mouseX;
}
于 2011-09-22T19:41:50.420 回答