“表达式不能用作函数”在return语句中

时间:2018-05-23 17:19:44

标签: c++ expression emplace

代码(也是 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()的最后一个括号后面。

看看这个错误的其他问题,它们似乎归结为失踪的操作员,但这似乎并非如此。为什么会这样?

1 个答案:

答案 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;