Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ stringstream问题-向量迭代器不可解引用_C++_Stl_Stringstream - Fatal编程技术网

C++ stringstream问题-向量迭代器不可解引用

C++ stringstream问题-向量迭代器不可解引用,c++,stl,stringstream,C++,Stl,Stringstream,我对下面的代码片段有问题 它与stringstream“stringstream css(cv.back())”位相关。如果被注释掉,程序将正常运行 这真的很奇怪,因为我一直在我的一些程序中使用它,但是如果我只是创建一个控制台项目,代码就会运行良好。在我的一些Win32程序中,它会,在一些程序中它不会(然后它将返回“vector iterator not Dereferenceable”,但它会很好地编译) 任何想法都将不胜感激。谢谢 vector<double> cRes(2);

我对下面的代码片段有问题

它与stringstream“stringstream css(cv.back())”位相关。如果被注释掉,程序将正常运行

这真的很奇怪,因为我一直在我的一些程序中使用它,但是如果我只是创建一个控制台项目,代码就会运行良好。在我的一些Win32程序中,它会,在一些程序中它不会(然后它将返回“vector iterator not Dereferenceable”,但它会很好地编译)

任何想法都将不胜感激。谢谢

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());