2010-04-19 3 views
0

У меня проблема со следующим фрагментом кода.stringstream problem - векторный итератор не может быть заменен

Он связан с битом 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; 
} 
+3

Вы уверены, что 'cv' не пуст? – Naveen

+0

вам нужно объяснить немного больше. какая проблема вы испытываете? –

+1

Не обращаясь к вашему вопросу, но это действительно нужно реорганизовать. У вас в основном идентичный код, который вы вызываете четыре раза с разными именами. – 2010-04-19 13:34:50

ответ

1

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

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

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

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

Цреса и Pres будут переменными передаются в вашу функцию, а не глобальный переменной, которые вы продемонстрировали.

Вы должны показать нам код вызова, где проблема возникает, прежде чем мы сможем диагностировать эту проблему - хотя мне интересно, почему вы не просто использовать push_back здесь,


Там другая проблема здесь:

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

у вас нет проверки, чтобы гарантировать, ПХВ, ХВ, ФВ и резюме не являются пустыми. Вполне возможно, что у вашего std::getline s были проблемы, которые помешали им успешно завершить работу, и также вполне возможно, что файлы, которые вы передали, были пустыми.

+0

@Billy Он также прокрался там «cin», чтобы добавить в замешательство :-) – 2010-04-19 13:35:40

+0

Решенный - спасибо Билли. Это была проблема с некоторыми файлами, которые были пустыми/несуществующими (я перемещал вещи, когда пытался связать статически, я думал, что я дважды проверял это, но я, должно быть, пропустил нечетный файл или два). Я не слишком обеспокоен проверкой ошибок, поскольку программа не будет распространяться и получит файлы txt с фиксированным размером (но я могу понять, почему это нужно делать). Спасибо, миллион! – andreas

Смежные вопросы