以下是代码。为什么我不能在C++ 0x中的lambda中声明结构变量?
#include<struct.h>
#include<iostream>
#include<functional>
using namespace std;
void LambdaTest(const function <struct dummy (void)>& f)
{
struct dummy test = f();
cout<<test.a<<endl;
}
int main()
{
int val = 5;
struct dummy dum;
auto func = [val](void) -> struct dummy
{
dummy temp;
temp.a = val;
return temp;
};
LambdaTest(func);
return 0;
}
文件struct.h非常简单。
struct dummy
{
int a;
};
GCC抱怨说
lambda_struct.cpp:19:38: error: field ‘temp’ has incomplete type
这可以吗?如果是,那我该如何解决?如果不是,那为什么不呢?
编辑:
代码(被他人发现)的返回类型的错误已得到修复。
SOLUTION:
的问题是,C++ 0X标准允许定义一个新的结构(和一个类也一样,大概)中的λ定义本身的返回类型。所以如果struct关键字存在于返回类型中,编译器会认为它是一个新类型并开始抱怨。
固定的代码是
#include<struct.h>
#include<iostream>
#include<functional>
using namespace std;
void LambdaTest(const function <struct dummy (void)>& f)
{
struct dummy test = f();
cout<<test.a<<endl;
}
int main()
{
int val = 5;
struct dummy dum;
auto func = [val](void) -> dummy
{
dummy temp;
temp.a = val;
return temp;
};
LambdaTest(func);
return 0;
}
我得到的错误,你的拉姆达不MSVC返回值++。 '匿名命名空间':: :: operator()':必须返回一个值。一旦我确定它编译并输出了5. –
0x5f3759df