【发布时间】:2013-04-07 14:42:02
【问题描述】:
所以我有这个:
class Grup : public Shape
{
private:
std::vector<Shape *> continut;
public:
static const std::string identifier;
Grup(){};
~Grup(){
continut.clear();
};
void add(Shape *);
void remove(Shape *);
void output(std::ostream &) const;
void readFrom(std::istream &);
void moveBy(int, int);
friend std::ostream &operator<<(std::ostream &, const Grup &);
}
我想实现删除功能。 我试过这个:
void Grup::remove(Shape *s)
{
vector<Shape*>::iterator it;
it = continut.begin();
while(it!=continut.end())
{
if((*it) == s)
{
it = continut.erase(it);
}
else it++;
}
}
但是 == 并没有给我返回一个真正的价值。我还尝试在每个形状上重载运算符 == 但结果相同。我该怎么办?
【问题讨论】:
-
只有两个建议,使用
std::remove而不是while(为什么要键入已经在 stl 上键入的算法?)并且不要清除析构函数中的向量,它将是反正清除了。 -
发布你的代码重载 operator== 不起作用
-
@makc 我试过这样的事情:
bool Triunghi::operator==(const Triunghi& T) { if(this->identifier==T.identifier&&this- >p1.getX()==T.p1.getX()&&this->p1.getY()==T.p1.getY()&&this->p2.getX()==T.p2.getX()&&this->p2.getY()==T.p2.getY()&&this->p3.getX()==T.p3.getX()&&this->p3.getY()==T.p3.getY()) return 1; return 0; } -
@user2116010 标识符代表什么?您是否尝试调试此代码并检查哪个参数不相等?
-
@makc 是的,我试过了,它甚至没有进入这个重载函数
标签: c++ oop operator-overloading