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