【问题标题】:"expression cannot be used as a function" in return statement [closed]return 语句中的“表达式不能用作函数”[关闭]
【发布时间】: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()”的最后一个括号中。

verticesstd::map&lt;T, std::set&lt;T&gt;&gt;emplace() should return a pair&lt;iterator,bool&gt; 类型,通过 second() 访问布尔值,因此返回它。不同版本的代码(例如,用变量foo 捕获这对并返回foo.second())没有区别;错误出现在second() 的最后一个括号之后。

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

【问题讨论】:

  • firstsecond 不是函数,而是成员变量。

标签: c++ expression emplace


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2011-03-19
    • 2015-01-12
    • 2022-01-10
    • 2012-12-09
    • 2020-01-14
    • 2021-08-23
    • 1970-01-01
    • 2014-03-16
    • 2023-04-01
    相关资源
    最近更新 更多