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;