2010-04-19 93 views
0

我遇到了以下代碼段的問題。stringstream問題 - 向量迭代器無法取消引用

它與stringstream「stringstream css(cv.back())」有關。如果它被註釋掉,程序將運行正常。

這真的很奇怪,因爲我一直在我的一些程序中得到它,但如果我只是創建一個控制檯項目,代碼將運行良好。在我的一些Win32程序中,它會在某些情況下不會(然後它會返回「vector iterator not derefereenable」,但它會編譯得很好)。

任何想法都將非常感激。謝謝!

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 2010-04-19 13:22:16

+0

你需要多解釋一下。你遇到什麼問題? – 2010-04-19 13:31:53

+1

不解決你的問題,但這應該真的重構。你有基本相同的代碼,你用不同的名字四次調用。 – 2010-04-19 13:34:50

回答

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完全有可能會阻止它們成功完成,而且您傳遞的文件也完全可能是空的。

+0

@比利他也在裏面偷偷摸摸一個「cin」,以增加混亂:-) – 2010-04-19 13:35:40

+0

解決了 - 感謝比利。這是一些文件空白/不存在的問題(我嘗試靜態鏈接時曾有過動作,我認爲我已經仔細檢查了這一點,但我一定錯過了一兩個奇怪的文件)。 我不太在意錯誤檢查,因爲程序不會被分發,並會收到固定大小的txt文件(但我可以看出爲什麼應該這樣做)。 非常感謝! – andreas 2010-04-19 13:56:51