代码(也是 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>
,bool可通过second()
访问,因此会返回它。不同版本的代码(例如,使用变量foo
捕获该对并返回foo.second()
)没有任何区别;错误在second()
的最后一个括号后面。
看看这个错误的其他问题,它们似乎归结为失踪的操作员,但这似乎并非如此。为什么会这样?
答案 0 :(得分:3)
The second
member of std::pair
是成员变量,不是成员函数。您只需要省略括号,因为您正在获取其值(而不是调用它):
return vertices.emplace(std::piecewise_construct,
std::forward_as_tuple(new_vert),
std::forward_as_tuple()).second;