【问题标题】:Getting Run-Time error when trying to Load a file : Vector subscript out of range?尝试加载文件时出现运行时错误:向量下标超出范围?
【发布时间】:2012-03-28 23:15:13
【问题描述】:

我正在为管理酒店的班级制作程序。我有一个功能可以保存程序中的所有当前信息。但是当我尝试加载该信息时,程序崩溃并说:向量下标超出范围。我尝试调试,发现问题所在的区域(我认为我正确使用了调试器?),但我没有得到任何编译器错误,所以我不知道出了什么问题。有什么建议吗?

void Customer::fromFileString(string data)
{
vector<string> field=tokenize(data);
name=field[0];
phoneNumber=field[1]; //<--- DEBUGGER SAYS ERROR IS IN THIS LINE
ccNumber=field[2];
customerID=stringToInt(field[3]);
int numberOfrooms = stringToInt(field[4]);
for(int i=0;i<numberOfrooms;i++)
{
    roomsCheckedInto.push_back(stringToInt(field[5+i]));
}
}

这里是tokenize函数

vector<string> tokenize(string com)
{
istringstream is(com);
vector<string> vs;
string s;
while(!is.eof())
{
    is>>s;
    vs.push_back(s);
}
return vs;
}

【问题讨论】:

  • 很可能你的函数 tokenize 只返回一个向量 只包含一个字符串,你能发布这个函数的代码,以便我们告诉你可能是什么错误
  • @EdChum 好的,我添加了标记化功能
  • 我想通了,我得调整分词器

标签: c++ vector fstream


【解决方案1】:

它告诉你field[1] 不存在。因此,无论出于何种原因,您的 tokenize 函数都返回一个长度为 1 的向量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-31
    相关资源
    最近更新 更多