【发布时间】:2018-05-23 17:19:43
【问题描述】:
代码(也 screenshot):
/***
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 是 std::map<T, std::set<T>> 和 emplace() should return a pair<iterator,bool> 类型,通过 second() 访问布尔值,因此返回它。不同版本的代码(例如,用变量foo 捕获这对并返回foo.second())没有区别;错误出现在second() 的最后一个括号之后。
查看与此错误有关的其他问题,它们似乎归结为缺少某处的运算符,但这里似乎并非如此。为什么会这样?
【问题讨论】:
-
first和second不是函数,而是成员变量。
标签: c++ expression emplace