C++ &引用;表达式不能用作函数";回报声明

C++ &引用;表达式不能用作函数";回报声明,c++,expression,emplace,C++,Expression,Emplace,代码(也是 ): /*** 尝试在顶点中放置新顶点, 返回错误 如果失败(即顶点已在顶点中) 还是真的 如果成功了 ***/ 模板 布尔图::addVert(常数T和新值){ 返回顶点.emplace(标准::分段_构造, 标准::转发作为元组(新的垂直), std::forward_as_tuple()).second(); }; 如屏幕截图所示,错误发生在“.second()”的最后一个括号中 顶点的类型为std::map和emplace(),通过second()可以访问bool,因此返回

代码(也是 ):

/***
尝试在顶点中放置新顶点,
返回错误
如果失败(即顶点已在顶点中)
还是真的
如果成功了
***/
模板
布尔图::addVert(常数T和新值){
返回顶点.emplace(标准::分段_构造,
标准::转发作为元组(新的垂直),
std::forward_as_tuple()).second();
};
如屏幕截图所示,错误发生在“
.second()
”的最后一个括号中

顶点
的类型为
std::map
emplace()
,通过
second()
可以访问bool,因此返回它。代码的不同版本(例如,使用变量
foo
捕获对,并返回
foo.second()
)没有区别;错误出现在
second()
的最后一个括号之后

看看有这个错误的其他问题,它们似乎可以归结为缺少某个地方的操作符,但这里的情况似乎不是这样。为什么会发生这种情况?

是一个成员变量,而不是成员函数。在获取其值时,只需省略括号(而不是调用它):


first
second
不是函数,而是成员变量。
/***
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();
};
return vertices.emplace(std::piecewise_construct,
    std::forward_as_tuple(new_vert),
    std::forward_as_tuple()).second;