我正在尝试使用链接列表来修改测试文件。部分代码是
#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 任何想法?
答案 0 :(得分:0)
我觉得变量count
已超出索引范围。
只需在致电if(count < contents.size())
aisbn.setCode
我在代码中看到了其他缺陷,你一次又一次地将同一个aisbn
对象推送到isbns
(isbns.push_back(aisbn)
)