【问题标题】:No operator "==" matches these operands for sf::RectangleShape没有运算符 "==" 匹配 sf::RectangleShape 的这些操作数
【发布时间】:2016-07-07 08:49:35
【问题描述】:

尝试比较两个 sf::RectangleShape 对象时出现以下错误:

没有运算符“==”与这些操作数匹配。

您可以在以下代码中看到两种类型(snakeaddsnakey[0])都是 sf::RectangleShape。当我尝试比较两个 sf::RectangleShape 时,为什么会出现编译器错误?

下面是有问题的代码。我在错误所在的地方添加了一条评论:

sf::RectangleShape snake;

//increases size of the snake
sf::RectangleShape addsnake()
{
    sf::RectangleShape addsnake1;
    addsnake1.setSize(sf::Vector2f(20, 25));
    addsnake1.setFillColor(sf::Color::Red);
    addsnake1.setPosition(100, 100);
    sf::RectangleShape addsnake2;
    addsnake2.setSize(sf::Vector2f(20, 30));
    addsnake2.setFillColor(sf::Color::Red);
    addsnake2.setPosition(100, 100);
    sf::RectangleShape addsnake3;
    addsnake3.setFillColor(sf::Color::Red);
    addsnake3.setSize(sf::Vector2f(20, 35));
    addsnake3.setPosition(100, 100);
    sf::RectangleShape addsnake4;
    addsnake4.setSize(sf::Vector2f(20, 40));
    addsnake4.setFillColor(sf::Color::Red);
    addsnake4.setPosition(100, 100);
    sf::RectangleShape addsnakey[4] = { addsnake1, addsnake2, addsnake3, addsnake4 };
    if (snake == snake) //problem here (No operator "==" matches these operands)
        return addsnakey[0];
    else if (snake == addsnakey[0])
        return addsnakey[1];
    else if (snake == addsnakey[1])
        return addsnakey[2];
    else if (snake == addsnakey[2])
        return addsnakey[3];
    else if (snake == addsnakey[3])
        return addsnakey[4];
}

【问题讨论】:

  • 反正代码是废话:if (a == a)snake怎么可能不等于snake
  • 您是否希望人们猜测您发布的代码页中的哪一行是导致此编译错误的行?
  • 我在它旁边添加了一条评论。里面不远。它在代码的第一个函数中。
  • formatted your question 删除了代码中不相关的部分并格式化了代码以使其更有意义;但是,代码存在问题,可能仍然表示反对,即if (snake == snake) 行永远不会是真的(但当snake == addsnakey[0] 不工作时可能是测试代码?)并尝试访问addsnakey[4] 哪个超出范围。

标签: c++ sfml


【解决方案1】:

没有为sf::RectangleShape 类定义相等运算符。您需要创建一个,并确定究竟是哪些属性决定了相等性。

也许大小和位置是你关心的。所以你可以定义以下函数:

bool operator==( const sf::RectangleShape & a, const sf::RectangleShape & b )
{
    return a.getSize() == b.getSize() && a.getPosition() == b.getPosition();
}

这没关系,因为getSizegetPosition 成员函数都返回一个Vector2f确实 有一个相等运算符。你可能也关心getScale

当然,由您决定什么是平等。 sf::RectangleShape 上缺少相等运算符并不奇怪,因为它做了很多事情,包括纹理等。这显然不是您希望与其他对象进行比较的那种事情。

Reference for sf::Vector2f

【讨论】:

  • 大警告:sf::Vector2f 的相等运算符考虑浮点不精确!你不应该使用这样的代码。
猜你喜欢
  • 2013-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-07
相关资源
最近更新 更多