0

下面的代码片段有问题。

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

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

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

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;
}
4

1 回答 1

1

这里有两个主要问题。这些问题中的一个或两个都可能导致您遇到的问题。

您正在从您的范围之外隐藏名称

vector<double> cRes(2);
vector<double> pRes(2);

int readTimeVects2(vector<double> &cRes, vector<double> &pRes){

cRes 和 pRes 将是传递给您的函数的变量,而不是您演示的全局变量。

在我们能够诊断此问题之前,您需要向我们展示发生问题的调用代码 - 尽管我想知道您为什么不只是在这里使用 push_back,


这里还有一个问题:

stringstream phss(phv.front());
stringstream chss(chv.front());
stringstream pss(pv.back());
stringstream css(cv.back());

您没有检查以确保 phv、chv、pv 和 cv 不为空。完全有可能您std::getline的上述问题导致他们无法成功完成,并且您传递的文件也完全有可能是空的。

于 2010-04-19T13:31:43.320 回答