代码(也是 截图):
/***
Attempts to emplace new_vert in vertices,
returning false
if it failed (i.e., the vertex was already in vertices)
or true
if it succeeded
***/
template <typename T>
bool Graph<T>::addVert(const T& new_vert) {
return vertices.emplace(std::piecewise_construct,
std::forward_as_tuple(new_vert),
std::forward_as_tuple()).second();
};
如屏幕截图所示,错误发生在“ .second()
”的最后一个括号中。
vertices
是 type std::map<T, std::set<T>>
,emplace()
应该返回 apair<iterator,bool>
, bool 可以通过 访问second()
,因此返回它。不同版本的代码(例如,用变量捕获一对foo
并返回foo.second()
)没有区别;错误跟在 的最后一个括号之后second()
。
查看与此错误有关的其他问题,它们似乎归结为缺少某处的运算符,但这里似乎并非如此。为什么会这样?