在我的程序中,每当单击鼠标时,我都会向一个向量添加一个类Laser实例。之后,当更新激光器运动时,我检查它是否已经超过一定距离,如果有,我想将它从矢量中移除。所以我首先在矢量中循环比较激光位置和this.getPosition()的位置,但它从未起作用。所以我尝试使用运算符重载,所以我可以==矢量中的激光和'this'激光。我想知道的是,矢量中的激光是否与“此”激光相同。但它永远不会奏效。这是我的代码。
class Laser
{
public:
sf::Texture texture;
sf::Sprite sprite;
int speed;
sf::Vector2i startPoint;
sf::SoundBuffer buffer;
sf::Sound sound;
void move(std::vector <Laser> shots);
bool operator == (const Laser& rh)const;
Laser(float rot, int spd, sf::Vector2i pos);
Laser() {};
~Laser();
};
和运算符重载的代码以及我实际尝试查看它是否是相同的激光器。
int index = -1;
for (int i = 0; i < shots.size(); i++) {
if (*this == shots[i]) {
index = i;
break;
}
}
if (index >= 0) {
shots.erase(shots.begin() + index);
}
}
}
bool Laser::operator==(const Laser & rh) const
{
return (*this == rh);
}
所以真的,我想要做的就是比较他们的内存地址,看看他们是否是相同的激光实例,所以我可以从矢量中删除它。如果我特别无知或粗鲁或类似的话,请提前感谢您的帮助。
答案 0 :(得分:1)
*this
是Laser
,rh
是激光,所以它会调用Laser::operator==
。
在*this
内部是Laser
,而rh
是激光,因此它会调用Laser::operator==
。
在*this
内部是Laser
,而rh
是激光,因此它会调用Laser::operator==
。
在*this
内部是Laser
,而rh
是激光,所以它会调用Laser::operator==
。
你看到了这个问题?如果你想要做的只是比较内存地址,那就改为做。 this
是内存地址,&rh
是内存地址,因此:
return this==&rh
话虽如此,这是一个可怕的想法。身份不应该是C ++中平等的基础。如果你解释真正的问题,我们可以提出一个更好的解决方案。