【发布时间】:2011-11-02 10:17:52
【问题描述】:
这是代码。
#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关键字,编译器会认为它是一个新类型并开始报错。
固定代码是
#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;
}
【问题讨论】:
-
我收到的错误是您的 lambda 在 MSVC++ 中没有返回值。 `anonymous namespace'::
::operator()' :必须返回一个值。一旦我修复它编译并输出 5.