操作员重载和打印

时间:2014-04-09 15:06:51

标签: c++ operator-overloading

我正在尝试在后端实用程序上运行测试时遇到困难。

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;
}

0 个答案:

没有答案