проблема потока строк - векторный итератор не разыменовывается - PullRequest
0 голосов
/ 19 апреля 2010

У меня проблема со следующим фрагментом кода.

Это связано с битом stringstream css (cv.back ()) ". Если это закомментировано, программа будет работать нормально.

Это действительно странно, так как я продолжаю получать его в некоторых моих программах, но если я просто создаю консольный проект, код будет работать нормально. В некоторых из моих Win32-программ это будет, а в некоторых - нет (тогда он вернет «векторный итератор без разыменования», но скомпилируется просто отлично).

Любые идеи были бы очень признательны. Спасибо!

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

1 Ответ

1 голос
/ 19 апреля 2010

Здесь есть две основные проблемы. Любая из этих проблем может быть причиной обеих проблем.

Вы скрываете имена за пределами вашей сферы действия :

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 выше были проблемы, которые мешали их успешному завершению, и также вполне возможно, что файлы, которые вы передали, были пустыми.

...