C++ - std::map 以枚举作为键
C++ - std::map with an enum as key
我目前正在尝试创建一个 std::map 来存储键盘每个键的状态。为此,我创建了以下地图:
static std::map<enum MouseCode, enum InputState> mousePressedMap;
这里没问题。
为了注册状态,我创建了一个由我的 main class 调用的函数:
void Input::ReadUserInput(enum Input::MouseCode mouseCode, enum Input::InputState inputState) {
mousePressedMap[mouseCode] = inputState;
}
这里我遇到了问题:我在 mousePressedMap 的“[”上遇到错误,说:没有“[]”运算符对应于那些操作数。
我也做不到:
void Input::ReadUserInput(enum Input::MouseCode mouseCode, enum Input::InputState inputState) {
mousePressedMap[MouseCode::LeftButton] = InputState::DOWN;
}
我遇到了同样的错误。
此外,我认为错误不是来自我的枚举:
/// <summary>
/// <para>Enumeration to set parameters to the mouse buttons handling function. The mouse code defines which button has been called.</para>
/// </summary>
enum MouseCode {
LeftButton = 0,
MiddleButton = 1,
RightButton = 2
};
/// <summary>
/// <para>Enumeration to set parameters to the mouse buttons handling function. The input state is the current state of the button</para>
/// </summary>
enum InputState {
/// <summary>
/// Just pressed.
/// </summary>
DOWN,
/// <summary>
/// Just released.
/// </summary>
UP,
/// <summary>
/// Was already pressed the last frame.
/// </summary>
PRESSED,
/// <summary>
/// Is not currently activated and wasn't the last frame.
/// </summary>
INACTIVE
};
谁能解释一下为什么?我来自 C# 和 Java 语言,在这些语言中,这种语法可以完美地工作,很奇怪这里不是这种情况。
感谢您的帮助!
编辑 1:
错误信息是(法语,对不起...):
Erreur C2679 '[' binaire:aucun opérateur trouvé qui accepte un opérande de partie droite de type 'InputsManagement::Input::MouseCode' (ou il n'existe pas de conversion acceptable) Win7 DirectX c:\users\maxime\desktop\directx tests\win7 directx\win7 directx\input.cpp 16
所以,这段代码的目的是将值0、1、2映射成其他值?使用由 MouseCode
值索引的数组。
我目前正在尝试创建一个 std::map 来存储键盘每个键的状态。为此,我创建了以下地图:
static std::map<enum MouseCode, enum InputState> mousePressedMap;
这里没问题。
为了注册状态,我创建了一个由我的 main class 调用的函数:
void Input::ReadUserInput(enum Input::MouseCode mouseCode, enum Input::InputState inputState) {
mousePressedMap[mouseCode] = inputState;
}
这里我遇到了问题:我在 mousePressedMap 的“[”上遇到错误,说:没有“[]”运算符对应于那些操作数。 我也做不到:
void Input::ReadUserInput(enum Input::MouseCode mouseCode, enum Input::InputState inputState) {
mousePressedMap[MouseCode::LeftButton] = InputState::DOWN;
}
我遇到了同样的错误。
此外,我认为错误不是来自我的枚举:
/// <summary>
/// <para>Enumeration to set parameters to the mouse buttons handling function. The mouse code defines which button has been called.</para>
/// </summary>
enum MouseCode {
LeftButton = 0,
MiddleButton = 1,
RightButton = 2
};
/// <summary>
/// <para>Enumeration to set parameters to the mouse buttons handling function. The input state is the current state of the button</para>
/// </summary>
enum InputState {
/// <summary>
/// Just pressed.
/// </summary>
DOWN,
/// <summary>
/// Just released.
/// </summary>
UP,
/// <summary>
/// Was already pressed the last frame.
/// </summary>
PRESSED,
/// <summary>
/// Is not currently activated and wasn't the last frame.
/// </summary>
INACTIVE
};
谁能解释一下为什么?我来自 C# 和 Java 语言,在这些语言中,这种语法可以完美地工作,很奇怪这里不是这种情况。
感谢您的帮助!
编辑 1: 错误信息是(法语,对不起...): Erreur C2679 '[' binaire:aucun opérateur trouvé qui accepte un opérande de partie droite de type 'InputsManagement::Input::MouseCode' (ou il n'existe pas de conversion acceptable) Win7 DirectX c:\users\maxime\desktop\directx tests\win7 directx\win7 directx\input.cpp 16
所以,这段代码的目的是将值0、1、2映射成其他值?使用由 MouseCode
值索引的数组。