"expression cannot be used as a function"回报声明

"expression cannot be used as a function" in return statement

本文关键字:function 回报 声明 used expression cannot be as      更新时间:2023-10-16

Code (也 截图(:

/***
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<T, std::set<T>>类型,emplace()应该返回一个pair<iterator,bool>,布尔值可通过second()访问,因此返回它。不同版本的代码(例如,用变量foo捕获该对并返回foo.second()(没有区别;错误跟在second()的最后一个括号后面。

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

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

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