You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++中vector存储自定义类实例后printVector函数输出异常问题排查求助

修复方案

方案一:用指针让vector和原始对象保持同步(推荐)

如果你希望修改原始对象时,vector里的内容自动更新,可以让vector存储对象指针:

  1. 修改vector的类型:
vector<Name_values*> week;
  1. 更新fill函数和调用方式:
void fill (vector<Name_values*>& v, Name_values* o){
    v.push_back(o);
}

// main里调用时传入对象的地址
fill(week, &mon);
fill(week, &die);
fill(week, &mit);
fill(week, &don);
fill(week, &fre);
fill(week, &sam);
fill(week, &son);
  1. 修改printVector来适配指针:
void printVector(vector<Name_values*>& v){
    for (Name_values* o : v){
        o->printAll();
    }
}

方案二:修改完原始对象后同步到vector

如果不想用指针,可以在while循环结束后,把修改后的对象重新赋值给vector的对应位置:

// while循环结束后添加:
week[0] = mon;
week[1] = die;
week[2] = mit;
week[3] = don;
week[4] = fre;
week[5] = sam;
week[6] = son;

修复条件分支错误

把最后两个判断里的die.addValue(value)改成对应的对象:

else if (name == sam.getName() || name == sam.getName2()){
    sam.addValue(value);
} else if (name == son.getName() || name == son.getName2()){
    son.addValue(value);
}

额外优化:避免除零的逻辑修正

你的printAll函数里的除零判断顺序有点问题,应该先判断size是否为0再计算,避免逻辑漏洞:

void Name_values::printAll(){
    double average = 0;
    double sum = 0;
    for(int i = 0; i< values.size(); ++i){
        sum += values.at(i);
    }
    if(values.size() > 0){
        average = sum / values.size();
    } else {
        average = 0; // 可以根据需求设置默认值
    }
    cout<<"Name: "<< name <<". Average: "<< average <<endl;
}

内容的提问来源于stack exchange,提问作者Frederick Anderson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 23:39:04