如何解决在C ++三元运算符中使用lambda表达式:错误类型不匹配
我只是在探索lambda表达式,并尝试使用它从使用C ++三元运算符的函数返回。但是,以下代码无法正常工作!
这是该程序的简化版本,用于解释我的实际问题,因此,请仅使用lambda而不是return(x + y + offset)来发布答案。
在成员函数'int Calculator :: add(int,int)'中:12:26:错误:否 匹配三元'operator?:'(操作数类型为'bool','int'和 'Calculator :: add(int,int)::
的结尾')16:3:警告:控制 到达非空函数[-Wreturn-type]
#include <iostream>
#include <string>
class Calculator
{
public:
bool initalized = false;
int offset = 0;
int add(int x,int y)
{
return !initalized ? -1 : [this,x,y]()
{
return ((x+y) + offset);
};
}
};
int main()
{
Calculator c;
c.initalized = true;
c.offset = 1;
printf("%d",c.add(2,10));
}
我在做什么错了?
解决方法
您的三元运算符尝试返回-1或lambda,它们没有通用类型。
您需要实际调用lambda:
return !initalized ? -1 : [this,x,y]()
{
return ((x+y) + offset);
}(); // <= added ()
或者没有lambda:
return !initalized ? -1 : x+y+offset;
,
我在做什么错了?
三元表达式的真/假部分不兼容。您不能将-1
转换为lambda表达式,也不能将lambda表达式转换为int
。
我不清楚您要使用lambda表达式做什么,但是可以是:
return !initalized ? -1 : (x + y + this->offset);
如果出于某种原因需要使用lambda表达式,则必须调用lambda表达式。
return !initalized ? -1 : [this,y]() { return ((x+y) + this->offset); }();
// missing ^^
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。