没有运算符“==”与 sf::RectangleShape 的这些操作数相匹配

No operator "==" matches these operands for sf::RectangleShape

我在尝试比较两个 sf::RectangleShape 对象时遇到以下错误:

No operator "==" matches these operands.

你可以在下面的代码中看到这两种类型(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];
}

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

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

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

这没问题,因为 getSizegetPosition 成员函数 return 和 都有 Vector2f一个相等运算符。您可能也关心 getScale

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

Reference for sf::Vector2f