我试图找出一个对象是否存在于一个指针向量中。stl_algo.h错误,比较指针
vector<Objectoid*> elements;
bool contains(Objectoid &o){
for(int i = 0; i < elements.size(); i++){
if(elements[i] == &o){
return true;
}
}
return false;
}
但得到这些错误,
no match for 'operator==' in '__first. __gnu_cxx::__normal_iterator<_Iterator, _Container>::operator* [with _Iterator = Objectoid**, _Container = std::vector<Objectoid*, std::allocator<Objectoid*> >]() == __value'
在
。
非常感谢。
编辑:
的完整代码
class Cell : public Element{
public:
Rectf cellRect;
Vec2i size;
Vec2i pos;
vector<Objectoid*> elements;
Cell(Vec2f &pos_, Vec2f &size_){
pos = pos_;
size = size_;
Vec2f p2 = Vec2f(pos.x + size.x, pos.y + size.y);
cellRect = Rectf(pos, p2);
}
void add(Objectoid &o){
elements.push_back(&o);
}
void remove(Objectoid &o){
elements.erase(std::remove(elements.begin(), elements.end(), o), elements.end());
}
bool contains(Objectoid &o){
for(int i = 0; i < elements.size(); i++){
if(elements[i] == &o){
return true;
}
}
return false;
}
};
我想实现一个2D游戏的碰撞检测哈希表。这是表中每个单元格的类。
编辑
所以罪魁祸首其实是
void remove(Objectoid &o){
elements.erase(std::remove(elements.begin(), elements.end(), o), elements.end());
}
确定这是罪魁祸首吗?错误信息是抱怨'operator *',但是在这段代码中没有'operator *'的用法。 – 2013-04-23 21:36:25
另外,'i'和'std :: vector :: size()'之间的有符号/无符号不匹配。 –
2013-04-23 21:37:10
我刚刚编译了这段代码(加上三行'#include','使用std :: vector;','struct Objectoid;'在顶部),唯一抱怨我从编译器得到的是signed/unsigned mismatch 。 –
zwol
2013-04-23 21:37:44