c++ - 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()
。
查看与此错误有关的其他问题,它们似乎归结为缺少某处的运算符,但这里似乎并非如此。为什么会这样?
解决方案
的second
成员std::pair
是成员变量,而不是成员函数。你只需要省略括号,因为你得到它的价值(而不是调用它):
return vertices.emplace(std::piecewise_construct,
std::forward_as_tuple(new_vert),
std::forward_as_tuple()).second;
推荐阅读
- sql - 如何在 MS SQL 中获取上个月的最新日期
- flutter - 我怎么能带这个词?(扑)
- javascript - React Material-UI Select 使用对象数组作为源
- wso2 - WSO2 EI 6.6.0 我部署的 API 可以工作,但经过一段时间后它停止响应
- r - 将向量按列转换为数据框
- android - 在下拉状态下更改 Material TextInputLayout 笔触颜色
- django - 带有 AWS S3 的 Django 中的静态文件
- macos - 通过动画师或 Mac 上的键盘大师的热键?
- android - Delphi 10.4 FMX UnsatisfiedLinkError
- jquery - 选择不同选项时如何向数据字段添加正则表达式验证