| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 441 人关注过本帖
标题:编译通过。运行错误 谁帮忙看下
只看楼主 加入收藏
yijing21
Rank: 1
等 级:新手上路
帖 子:48
专家分:0
注 册:2007-11-7
收藏
 问题点数:0 回复次数:2 
编译通过。运行错误 谁帮忙看下
void Information::Erase()
{
    cout<<"请输入要删除的学号:";
    string str;
    cin>>str;
    list<student> ivec;
    ifstream in;
    in.open("stu.txt",ios::in);
    while(in)
    {
        student stu;
        in>>stu.num>>stu.name>>stu.score[0]>>stu.score[1]>>stu.score[2];
        ivec.push_back(stu);
    }
    
    for(list<student>::iterator it=ivec.begin();it!=ivec.end();++it)//不知道是不是这段出了问题
        if(it->num==str)
            ivec.erase(it);
    
    ofstream out;
    out.open("stu.txt",ios::out);
    for(list<student>::iterator y=ivec.begin();y!=ivec.end();++y)
    {
        out<<y->num<<"\t";
        out<<y->name<<"\t";
        out<<y->score[0]<<"\t";
        out<<y->score[1]<<"\t";
        out<<y->score[2]<<"\t";
    }

 }


这是类Information的一个删除函数  先从文件读入数据  然后删除开始处制定的学号的数据  再存回文件  运行时出错  但是不知道是哪里错了  请大家指教
搜索更多相关主题的帖子: 编译 运行 
2008-04-18 22:05
yeyuanzhi
Rank: 1
等 级:禁止访问
帖 子:88
专家分:0
注 册:2005-12-31
收藏
得分:0 
回复 1# 的帖子
for(list<student>::iterator it=ivec.begin();it!=ivec.end();++it)//不知道是不是这段出了问题
        if(it->num==str)
            ivec.erase(it);

应该是迭代器失效的问题。
2008-04-19 09:05
yijing21
Rank: 1
等 级:新手上路
帖 子:48
专家分:0
注 册:2007-11-7
收藏
得分:0 
恩 之前我也觉得是这里问题  刚又仔细看了下  问题应该是在for的最后一个it上  删除了指定元素之后 再执行for表达式3时  it已经失效
2008-04-19 09:18
快速回复:编译通过。运行错误 谁帮忙看下
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.026036 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved