为什么会出现错误“使用临时作为左值”

时间:2019-04-03 18:47:16

标签: c++11

我不明白为什么会收到“使用临时值作为左值”错误。

void setEdgeLengths(
    const Koala::AssocArray <
        koalaGraph::PEdge, 
        Koala::DijkstraHeap::EdgeLabs<int>
    > &edgeMap, 
    const std::vector<koalaGraph::PEdge> &E) 
{
   int edgeLength = 1;
   for (const auto& e : E) {
      edgeMap[e].length = edgeLength;
   }
}

变量edgeLength不是临时的。

1 个答案:

答案 0 :(得分:1)

here找到的文档中(感谢Google):

Elem Koala::AssocArray<Klucz, Elem, Container>::operator[](Klucz v) const

这将返回一个临时值(非常量重载将返回引用,但如果键不存在,则会插入新项)。尝试改用valPtr

edgeMap.valPtr(e)->length = edgeLength;