2014-11-27 1 views
0

C++과 Objective-c (++) 파일을 혼합해야합니다. 나는 다음 문제에 스택했습니다 나는 코드가 있습니다Qt의 Objective-c를 통한 lambda (block) 슬롯

connect(menu_action,&QAction::triggered, [=]() 
{ 
//do_smthing(); 
}); 

을하지만 내가있어이 코드 (.mm 파일)을 포함 파일을 컴파일하려고 할 때 오류 "표현을 제외".

제외 표현식 및 컴파일러는 [ 다음에 심볼 =을 가리 킵니다.

어떻게이 코드를 Objective-c로 다시 작성할 수 있습니까?

+0

컴파일러의 C++ 11 기능을 사용합니까? –

+0

.pro 파일의 @SiyuanRen'QMAKE_CXXFLAGS + = -std = C++ 11'을 추가했습니다. 비슷한 .cpp 파일에서이 코드를 컴파일 할 때 - 괜찮습니다. 하지만 .cpp .mm 파일을 만들어야합니다. –

답변

1

구문이 잘못되었습니다. 읽어야합니다 : connect(menu_action, &QAction::triggered, [=]{do_smthing();});

닫는 세미콜론 전에 끝 괄호를 유의하십시오.

람다에서 함수를 호출하는 경우에는 람다에 대한 함수 포인터를 선호해야합니다. 이렇게하면 Qt가 신호와 슬롯을 유지 관리하므로 슬롯에 sender()으로 전화 할 수 있습니다.

+0

"닫는 세미콜론 앞에 끝 괄호를 적어 두십시오 :"실수 : 미안 해요 ( ) "()"오류가 여전히 남아 있습니다. PS 둘 이상의 기능이 있지만 유용한 정보에 감사드립니다! –

+0

@AntonKosobutskiy이 문제가 해결 된 경우이 대답을 수락하고 질문을 편집하거나 의견을 추가 할 수 있습니다. 또한 새 질문을 할 수 있으며 다음 링크를 제공하면 추가 질문을 할 수 있습니다. –

+0

"내가"() "을 삭제했을 때 오류가 여전히 존재합니다." 내 질문을 해결하지 못했습니다.이 말을 어떻게하면 좋을까요? 어떤 정보가 필요합니까? file.mm/objective- C (++)/qt/connect signal과 lambda (블록). 어떻게 정보를 보완 할 수 있습니까? –