Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C+中的Lambda+;0x:错误:请求从转换为非标量类型_C++_Qt_Lambda - Fatal编程技术网

C++ C+中的Lambda+;0x:错误:请求从转换为非标量类型

C++ C+中的Lambda+;0x:错误:请求从转换为非标量类型,c++,qt,lambda,C++,Qt,Lambda,我在编译lambda函数时遇到了一个问题: ... (int level = 3) ... QString str = [level] {QString s;for(int i=0;i++<level;s.append(" "));return s;}; 另一种变体: QString str = [level]->QString {QString s;for(int i=0;i++<level;s.append(" "));return s;}; error: expect

我在编译lambda函数时遇到了一个问题:

... (int level = 3) ...
QString str = [level] {QString s;for(int i=0;i++<level;s.append(" "));return s;};
另一种变体:

QString str = [level]->QString {QString s;for(int i=0;i++<level;s.append(" "));return s;};

error: expected token ';' got 'str'

QString str=[level]->QString{QString s;for(int i=0;i++您尝试将lambda分配给
QString
。您希望发生什么?不带参数的lambda是一个空函数。您需要调用它以获取其返回值

e、 g

另外,谢谢你给我展示了无参数lambda的语法。我不知道这是可能的。我也有点不确定它是否真的合法

编辑:它是合法的。5.1.2

lambda-expression:
    lambda-introducer lambda-declarator{opt} compound-statement

lambda-declarator:
    (parameter-declaration-clause) mutable{opt}

Lambda是基本结构为
[capture](arguments){code}
的匿名函数。您不能将参数传递给Lambda。我想您需要

QString str = [](int x){QString s;for(int i=0;i++<x;s.append(" "));return s;} (level);
//            ^^ lambda starts here                         argument to lambda ^^   

QString str=[](int x){QString s;for(int i=0;i++来自C++11标准,5.1.2.2(由我缩短)

lambda表达式的类型(也是闭包对象的类型)是一个唯一的、未命名的非联合类类型,称为闭包类型,其属性如下所述。[更多文本如下]


因此,其他人说,
QString
和lambda的类型不兼容。

这是合法的。在
5.1.2.4
中:“如果lambda表达式不包含lambda声明符,就好像lambda声明符是()”。认为这是合法的,
int main(){auto f=[]{return 23;};return f();}
@jrok谢谢。我刚刚也确认了这一点,并添加了相关的语法产品。谢谢@pmr!我忘了()
QString str = [level]->QString {QString s;for(int i=0;i++<level;s.append(" "));return s;};

error: expected token ';' got 'str'
int x = [] { return 23; }();
                         ^^
                        call
lambda-expression:
    lambda-introducer lambda-declarator{opt} compound-statement

lambda-declarator:
    (parameter-declaration-clause) mutable{opt}
QString str = [](int x){QString s;for(int i=0;i++<x;s.append(" "));return s;} (level);
//            ^^ lambda starts here                         argument to lambda ^^