我正在尝试在后端实用程序上运行测试时遇到困难。
int main(){
Status_List s_list;
s_list.add_status("Blind", 2);
s_list.add_status("Stun", 5);
s_list.add_status("Deaf", 3);
s_list.add_status("Weak", 4);
print_status(s_list);
for(int i = 0; i < 5; ++i){
--s_list;
print_status(s_list);
}
return 0;
}
void print_status(Status_List s_list){
for(int i = 0; i < s_list.status.size(); ++i){
std::cout << s_list.status[i]->get_eff() << ", " << s_list.status[i]->get_dur() << std::endl;
}
}
我相信我遇到的困难与这个实用程序有关:
Status_List& Status_List::operator--(){
int i = 0;
while(i < status.size()){
if(status[i]->get_dur() <= 1)
rem_status(i);
else{
status[i]->dec();
++i;
}
}
return *this;
}
Status_List Status_List::operator--(int){
Status_List tmp(*this);
operator--();
return tmp;
}
输出正确,直到我达到第一次减量。经过一些测试,我发现减量函数结束了,但是一旦在for循环中调用了print_status()函数,我就会出现分段错误,让我相信我已经改变了界限矢量。
Status_List类的成员:
std::vector<Status *> status;
班级成员状态:
void dec() {duration--;}
在游戏的这个阶段,没有成员应该激活rem_status()函数。
我的操作员是否过载正确,我是在错误的树上咆哮,还是在操作符 - ()函数中出现了什么?
编辑: 这里显示了rem_status()函数。由于输出在get_dur()返回时从不指示低于2,因此在segfault之前永远不应该调用此函数。
void Status_List::rem_status(int index){
Status * stat = status[index];
status.erase(status.begin() + index);
delete stat;
}