std::list 迭代器,没有运算符"="与这些操作数匹配

std::list iterator, no operator "=" matches these operands

本文关键字:操作数 运算符 迭代器 list std      更新时间:2023-10-16

这是我第一次使用列表,如果我做了一些愚蠢的,很抱歉

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>>    

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++){
    //...
}

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

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

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

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

相关文章: