2011-05-02 64 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

相关问题