オブジェクトがポインターのベクトル内に存在するかどうかを調べようとしています。
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'
でstl_algo.h
。
大変助かりました。
編集:
完全なコード
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());
}