2011-05-02 74 views
0

我有一個寫入函數,它用於將列表內容寫入文件。該列表僅包含數字。如何將鏈接列表的內容寫入文件

list<int>::iterator pos; 
    for (pos = listStorage.begin(); pos != listStorage.end(); ++pos) 
    { 
     out << *pos << endl; 
    } 
    return out; 

我收到編譯錯誤;

錯誤C2679:二進制 '=':沒有操作員發現這需要類型的右邊的操作數 '的std ::列表< _Ty> :: _常量性< _Secure_validation>'(或沒有可接受的轉化率)

任何人都可以幫忙嗎?謝謝

+0

如果你註釋掉輸出語句,它能工作嗎? – 2011-05-02 15:22:45

回答

2

我很確定這是一個const問題。你的listStorage對象聲明爲const嗎?如果是這樣,你需要聲明你的迭代器作爲

const list<int>::iterator pos; 
+0

我宣佈我的清單存儲爲,列表 listStorage; – TweedyMK 2011-05-02 15:26:37

+1

看起來像一個常量問題,例如,如果它在一個const成員函數中。 – Puppy 2011-05-02 15:31:20

+1

如果將'list :: iterator'更改爲'list :: const_iterator',會發生什麼情況? – 2011-05-02 15:31:24

2

而不是外在的循環,我會使用一種算法:

std::copy(listStorage.cbegin(), listStorage.cend(), 
      std::ostream_iterator<int>(out, "\n")); 

這可能會阻止您所看到的問題,並順帶清理代碼,幾乎可以肯定運行速度更快(儘管使用"\n"而不是endl來加速)。

+0

爲什麼'cbegin'和'cend'?它們存在嗎? – Nawaz 2011-05-02 15:30:31

+0

是的,好點,cbegin和cend不存在於std :: list – TweedyMK 2011-05-02 15:33:21

+0

@Nawaz,'cbegin' /'cend'在C++ 11(又名C++ 0x)中是新的。 – 2011-05-02 15:35:28