首页 > 解决方案 > return 语句中的“表达式不能用作函数”

问题描述

代码(也是 截图):

/***
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()

查看与此错误有关的其他问题,它们似乎归结为缺少某处的运算符,但这里似乎并非如此。为什么会这样?

标签: c++expressionemplace

解决方案


second成员std::pair是成员变量,而不是成员函数。你只需要省略括号,因为你得到它的价值(而不是调用它):

return vertices.emplace(std::piecewise_construct,
    std::forward_as_tuple(new_vert),
    std::forward_as_tuple()).second;

推荐阅读