std :: list iterator,没有运算符“=”匹配这些操作数

时间:2015-07-02 00:29:30

标签: c++ list

这是我第一次使用列表,对不起,如果我做了一些愚蠢的事情

std::list<AbstractBlock>::iterator i;

    for (i = universe.getLoadedBlocks(); i != universe.getLoadedBlocks().end; i++){

    }

universe.getLoadedBlocks()返回和std::list<AbstractBlock>列表,但是我一直收到错误:

1   IntelliSense: no operator "=" matches these operands
        operand types are: std::_List_iterator<std::_List_val<std::_List_simple_types<AbstractBlock>>> = std::list<AbstractBlock, std::allocator<AbstractBlock>>    

2 个答案:

答案 0 :(得分:1)

for()循环的第一个条件中,您尝试将std::list分配给std::list::iterator,这是编译器所抱怨的内容。你的代码需要更像这样:

std::list<AbstractBlock>::iterator i;

std::list<AbstractBlock> &blocks = universe.getLoadedBlocks();
for (i = blocks.begin(); i != blocks.end(); i++){
    //...
}

答案 1 :(得分:0)

getLoadedBlocks()究竟返回了什么?我怀疑它会将引用返回给std::list<AbstractBlock>容器。在这种情况下,正确的for语法是

for (std::list<AbstractBlock>::iterator i = universe.getLoadedBlocks().begin(); 
     i != universe.getLoadedBlocks().end(); 
     ++i)
{

}

(并且更喜欢在C ++中使用前缀++)。

但如果它按值返回std::list<AbstractBlock>,那么您将不得不重新考虑整个方法。在这种情况下,您不能反复调用getLoadedBlocks()并期望迭代器具有可比性。