c ++'std :: out_of_range'

时间:2013-04-17 02:42:50

标签: c++ error-handling

我正在尝试使用链接列表来修改测试文件。部分代码是

#include <iostream>
#include <stdlib.h>
#include <string>
#include <fstream>
#include <list>
#include <iomanip>
#include <stdexcept>
using namespace std;

class isbn
{
    private:
    string code;
    int digit;

    public:
        //constructor
        isbn(): code(""), digit(0) { }

        //copy constructor
        isbn(const isbn &other):
        code(other.code),
        digit(other.digit) 
        {
            for(unsigned int i=0; i < (unsigned int) digit; i++)    
                code[i] = other.code[i];
        }
        void setCode(const char &temp);
        void setDigit(const int &num);

        isbn operator = (const isbn &other)
        {
            code = other.digit;
            digit = other.digit;
            for(unsigned int i=0; i < (unsigned int) digit; i++)    
            code[i] = other.code[i];
            return *this;
        }

};

void isbn::setCode(const char &temp)
{
    code = temp;
}
void isbn::setDigit(const int &num)
{
    digit = num;
}

void extIsbn_in_file(list<isbn> &isbns, const string &filename)
{
    ifstream filein;
    filein.clear();
    filein.open(filename.c_str());
    if(!filein)
    {
        cout << "error \n";
        exit(0);
    }
    cout << "\n";

    string contents;
    isbn aisbn;
    list<isbn>::iterator isbnitr;
    isbnitr = isbns.begin();
    int count = 0;

    while(!filein.eof())
    {
        getline(filein, contents, '\n');
        aisbn.setCode(contents.at(count));
        aisbn.setDigit(count);
        isbns.push_back(aisbn);
        count++;

    ..<more code>......
    ..<more code>......

    }
    filein.close();
}

int main(int argc, char *argv[])
{
if(argc > 0)
{
if(argc != 2)
{
cout << "invalid number of argument!! \n";
exit(0);
}
list<isbn> code;
extIsbn_in_file(code, argv[1]);
}
else
{
cout << "invalid number of argument!! \n";
exit(0);
}
return 0;
}

在调用给定的行

时会发生问题
        aisbn.setCode(contents.at(count));

在这段代码中,已调用方法,但不确定我是否使用setCode()或尝试使用at()

错误说               what():basic_string :: at 任何想法?

1 个答案:

答案 0 :(得分:0)

我觉得变量count已超出索引范围。 只需在致电if(count < contents.size())

之前检查aisbn.setCode

我在代码中看到了其他缺陷,你一次又一次地将同一个aisbn对象推送到isbnsisbns.push_back(aisbn)