以下是代碼。爲什麼我不能在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