我在尝试比较两个sf::RectangleShape
对象时遇到以下错误:
没有操作员" =="匹配这些操作数。
您可以在以下代码中看到这两种类型(snake
和addsnakey[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];
}
答案 0 :(得分:1)
没有为sf::RectangleShape
类定义相等运算符。您将需要创建一个,并确定哪些属性确定相等。
也许大小和位置是你关心的。所以你可以定义以下函数:
bool operator==( const sf::RectangleShape & a, const sf::RectangleShape & b )
{
return a.getSize() == b.getSize() && a.getPosition() == b.getPosition();
}
这没关系,因为getSize
和getPosition
成员函数都返回Vector2f
,其中 具有相等运算符。您可能也关心getScale
。
当然,由您来决定什么是平等。 sf::RectangleShape
上缺少一个相等运算符并不奇怪,因为它做了很多,包括纹理等。显然不是你期望与其他对象进行比较的那种东西。