警告:'enum sf::Keyboard::Key' 和 'enum sf::Mouse::Button' 之间的比较 [-Wenum-compare]|
warning: comparison between 'enum sf::Keyboard::Key' and 'enum sf::Mouse::Button' [-Wenum-compare]|
我正在为我的国际象棋游戏使用 C++ 图形中的 SFML 库。
在游戏中移动棋子时会发生鼠标左键事件。所以这就是我最初跟踪的方式。
sf::Event e;
if (e.type == sf::Event::MouseButtonReleased){
if(e.key.code == sf::Mouse::Left){
//Do something
}
}
这给出了以下编译警告;
|1175|warning: comparison between 'enum sf::Keyboard::Key' and 'enum sf::Mouse::Button' [-Wenum-compare]|
代码仍会正常执行。
- 为什么会出现这个问题?
- 避免此警告的解决方案是什么?
sf::Event
中的成员key
(即sf::Event::key
)是枚举sf::Keyboard::Key
中的枚举数,而枚举数sf::Mouse::Left
属于枚举 sf::Mouse::Button
.
原则上,在处理sf::Event::KeyPressed
或sf::Event::KeyReleased
事件时,只对sf::Event
中的union的key
成员感兴趣。
当您处理事件 sf::Event::MouseButtonReleased
时,联合中的错误数据成员 (sf::Event::key
) 正在与枚举数 sf::Mouse::Left
进行比较。尝试与 e.mouseButton.button
:
进行比较
sf::Event e;
if (e.type == sf::Event::MouseButtonReleased){
if (e.mouseButton.button == sf::Mouse::Left){
//Do something
}
我正在为我的国际象棋游戏使用 C++ 图形中的 SFML 库。
在游戏中移动棋子时会发生鼠标左键事件。所以这就是我最初跟踪的方式。
sf::Event e;
if (e.type == sf::Event::MouseButtonReleased){
if(e.key.code == sf::Mouse::Left){
//Do something
}
}
这给出了以下编译警告;
|1175|warning: comparison between 'enum sf::Keyboard::Key' and 'enum sf::Mouse::Button' [-Wenum-compare]|
代码仍会正常执行。
- 为什么会出现这个问题?
- 避免此警告的解决方案是什么?
sf::Event
中的成员key
(即sf::Event::key
)是枚举sf::Keyboard::Key
中的枚举数,而枚举数sf::Mouse::Left
属于枚举 sf::Mouse::Button
.
原则上,在处理sf::Event::KeyPressed
或sf::Event::KeyReleased
事件时,只对sf::Event
中的union的key
成员感兴趣。
当您处理事件 sf::Event::MouseButtonReleased
时,联合中的错误数据成员 (sf::Event::key
) 正在与枚举数 sf::Mouse::Left
进行比较。尝试与 e.mouseButton.button
:
sf::Event e;
if (e.type == sf::Event::MouseButtonReleased){
if (e.mouseButton.button == sf::Mouse::Left){
//Do something
}