C++ stringstream问题-向量迭代器不可解引用
我对下面的代码片段有问题 它与stringstream“stringstream css(cv.back())”位相关。如果被注释掉,程序将正常运行 这真的很奇怪,因为我一直在我的一些程序中使用它,但是如果我只是创建一个控制台项目,代码就会运行良好。在我的一些Win32程序中,它会,在一些程序中它不会(然后它将返回“vector iterator not Dereferenceable”,但它会很好地编译) 任何想法都将不胜感激。谢谢C++ stringstream问题-向量迭代器不可解引用,c++,stl,stringstream,C++,Stl,Stringstream,我对下面的代码片段有问题 它与stringstream“stringstream css(cv.back())”位相关。如果被注释掉,程序将正常运行 这真的很奇怪,因为我一直在我的一些程序中使用它,但是如果我只是创建一个控制台项目,代码就会运行良好。在我的一些Win32程序中,它会,在一些程序中它不会(然后它将返回“vector iterator not Dereferenceable”,但它会很好地编译) 任何想法都将不胜感激。谢谢 vector<double> cRes(2);
vector<double> cRes(2);
vector<double> pRes(2);
int readTimeVects2(vector<double> &cRes, vector<double> &pRes){
string segments;
vector<string> cv, pv, chv, phv;
ifstream cin("cm.txt");
ifstream pin("pw.txt");
ifstream chin("hm.txt");
ifstream phin("hw.txt");
while (getline(cin,segments,'\t')) {
cv.push_back(segments);
}
while (getline(pin,segments,'\t')) {
pv.push_back(segments);
}
while (getline(chin,segments,'\t')) {
chv.push_back(segments);
}
while (getline(phin,segments,'\t')) {
phv.push_back(segments);
}
cin.close();
pin.close();
chin.close();
phin.close();
stringstream phss(phv.front());
phss >> pRes[0];
phss.clear();
stringstream chss(chv.front());
chss >> cRes[0];
chss.clear();
stringstream pss(pv.back());
pss >> pRes[1];
pss.clear();
stringstream css(cv.back());
css >> cRes[1];
css.clear();
return 0;
}
vectorcres(2);
向量pRes(2);
int readTimeVects2(矢量和cRes、矢量和pRes){
字符串段;
载体cv、pv、chv、phv;
ifstream cin(“cm.txt”);
ifstream pin(“pw.txt”);
ifstream chin(“hm.txt”);
ifstream phin(“hw.txt”);
while(getline(cin,段,'\t')){
cv.推回(分段);
}
while(getline(管脚,管段,'\t')){
pv.推回(分段);
}
while(getline(下巴,部分,'\t')){
chv.推回(分段);
}
while(getline(phin,段,'\t')){
phv.推回(分段);
}
cin.close();
pin.close();
下巴。关闭();
phin.close();
字符串流phss(phv.front());
phss>>pRes[0];
phss.clear();
stringstream chs(chv.front());
chss>>cRes[0];
chss.clear();
stringstream pss(pv.back());
pss>>压力[1];
pss.clear();
stringstream css(cv.back());
css>>cRes[1];
css.clear();
返回0;
}
这里有两个主要问题。这些问题中的一个或两个都可能导致您遇到的问题
您正在将名称隐藏在您的范围之外:
vector<double> cRes(2);
vector<double> pRes(2);
int readTimeVects2(vector<double> &cRes, vector<double> &pRes){
没有检查以确保phv、chv、pv和cv不是空的。上面的
std::getline
s完全可能存在问题,无法成功完成,也完全可能是您传递的文件为空。您确定cv
不是空的吗?您需要进一步解释。您遇到了什么问题?没有解决您的问题,但这确实应该重构。你的密码基本上是一样的,你用不同的名字打了四次电话。@Billy他还偷偷在里面放了一个“cin”,让人更加困惑:-)解决了-谢谢Billy。这是一些文件为空/不存在的问题(我在尝试静态链接时移动了一些东西,我认为我已经仔细检查过了,但我一定错过了一两个奇怪的文件)。我不太关心错误检查,因为程序将不会被分发,并将接收固定大小的txt文件(但我知道为什么应该这样做)。万分感谢!
stringstream phss(phv.front());
stringstream chss(chv.front());
stringstream pss(pv.back());
stringstream css(cv.back());