我有一个bars
包含几个彩色框对象的向量。每个框对象都有自己的绘制和更新功能。每个框从屏幕的一侧移动到另一侧。当它在屏幕之外时,应该删除该框。我正在使用迭代器来移动框并确定它们何时在屏幕之外。
我对 c++ 很陌生,我无法让代码正常工作。从向量中删除对象的功能给了我错误Reference to non static member function must be called
。我正在阅读静态和非静态成员,但我还是有点迷茫。
这是我的主要头文件和相关代码
class game : public ofxiPhoneApp {
public:
void setup();
void update();
void draw();
void exit();
vector <Colorbar> bars;
bool checkBounds (Colorbar &b);
};
在我的 game.mm 文件中,我创建了向量并对其进行迭代以设置彩色条对象的属性:
void game::setup(){
bars.assign(5, Colorbar());
for (int i = 0; i<bars.size(); i++) {
ofColor color = colors.giveColor();
bars[i].setup();
bars[i].setColor(color.r,color.g,color.b);
bars[i].setWidth(50);
bars[i].setPos(ofGetScreenHeight()-(i*50), 0);
}
}
在屏幕上移动条的更新功能。
void game::update(){
for(vector<Colorbar>::iterator b = bars.begin(); b != bars.end(); b++){
(*b).update();
}
//this is the part that gives the error
bars.erase((remove_if(bars.begin(), bars.end(), checkBounds),bars.end()));
}
这是检查框是否超出范围的功能
bool game::checkBounds (Colorbar &b){
if (b.pos.x > ofGetScreenHeight()+50) {
// do stuff with bars vector here like adding a new object
return true;
} else {
return false;
}
}
我已经做了一些实验,bool checkBounds (Colorbar &b);
通过从头文件中删除它来制作非静态的,使代码工作。但问题是我还希望能够访问该bars
函数中的向量以在删除旧对象时添加新对象。这将不再起作用。
我该如何解决这个问题?