警告:'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::KeyPressedsf::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
    }