这是代码。
文件struct.h非常简单。
#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: 错误:字段 'temp' 具有不完整的类型
这样允许吗?如果是,怎么修复它?如果不是,为什么?
编辑:
代码中发现了返回类型的错误(由他人发现),已经进行了修复。
解决方法:
问题在于C++0x标准允许在lambda函数定义本身的返回类型中定义一个新的struct(和class也一样),所以如果返回类型中存在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;
}