没有操作员" =="匹配sf :: RectangleShape的这些操作数

时间:2016-03-20 23:35:59

标签: c++ sfml

我在尝试比较两个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];
}

1 个答案:

答案 0 :(得分: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