다음은 코드입니다.C++ 0x에서 람다 내부에 구조체 변수를 선언 할 수없는 이유는 무엇입니까?
#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
이 허용되는 불평? 그렇다면 어떻게 수정해야합니까? 그렇지 않다면, 그 이유는 무엇입니까?
편집 :
(다른 사람에 의해 발견 된) 코드의 반환 형식 버그는 이제 수정되었습니다.
해결책 :
문제는 C + +0 표준 람다 정의 자체의 반환 형식에 새로운 구조체 (너무 아마도 클래스)에 정의를 수 있다는 것입니다. 따라서 반환 키워드에 struct 키워드가 있으면 컴파일러는 이것이 새로운 유형이라고 생각하여 불평하기 시작합니다.
당신이 멀리 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;
}
내가지고있어 오류 : 다음 컴파일 및 실행은
출력을 예상대로. '익명 네임 스페이스 ':: :: operator()': 값을 반환해야합니다. 일단 내가 컴파일하고 출력 5 고정했습니다. –
0x5f3759df