Qt中通过Objective-c的lambda(块)插槽 我需要混合C++和Objul-C(++)文件。我已在下一个问题中添加了堆栈: 我有密码: connect(menu_action,&QAction::triggered, [=]() { //do_smthing(); });

Qt中通过Objective-c的lambda(块)插槽 我需要混合C++和Objul-C(++)文件。我已在下一个问题中添加了堆栈: 我有密码: connect(menu_action,&QAction::triggered, [=]() { //do_smthing(); });,c++,qt,lambda,objective-c-blocks,C++,Qt,Lambda,Objective C Blocks,但当我试图编译包含此代码的文件(.mm文件)时,出现了“excepted expression”错误 例外表达式和编译器在符号[之后指向符号= 如何将此代码重建为Objective-c?您的语法不正确。这应该是:connect(menu_action,&QAction::triggered,[=]{do_smthing()}); 请注意结束分号前的结束括号 值得一提的是,如果您只是在lambda中调用函数,您应该更喜欢lambda的函数指针。这将保留Qt对信号和插槽的维护,并且您可以在插槽中调用

但当我试图编译包含此代码的文件(.mm文件)时,出现了“excepted expression”错误

例外表达式和编译器在符号
[
之后指向符号
=


如何将此代码重建为Objective-c?

您的语法不正确。这应该是:
connect(menu_action,&QAction::triggered,[=]{do_smthing()});


请注意结束分号前的结束括号


值得一提的是,如果您只是在lambda中调用函数,您应该更喜欢lambda的函数指针。这将保留Qt对信号和插槽的维护,并且您可以在插槽中调用
sender()

“注意结尾分号之前的括号”:我搞错了,对不起(当我删除“()”时)错误仍然存在。另外,我有不止一个功能,但谢谢你提供有用的信息!@AntonKosobutskiy如果这解决了你的问题,我会继续接受这个答案。如果没有,你可以编辑问题或添加评论。对于后续问题,你可以问一个新问题,如果你在这里提供链接,我会尝试回答。“当我删除“()”时,错误仍然存在。”这并没有解决我的问题。我想如何评论这个问题?我的意思是,你需要哪一个信息?file.mm/objective-c(++)/qt/connect signal和lambda(block)。我如何补充信息?@AntonKosobutskiy Ah得到了它。所以
()
如果存在与否,则不应产生任何影响:请注意,第四个定义只是一个不带参数的lambda。无论如何,我认为接下来我们应该考虑的是实际错误。您可以编辑您的问题并添加它吗?我想[c++和qt]这不是重点。[Objective-c(++)和qt]这才是真正的重点。我看到了你的链接——我认为“[捕获列表]”——是错误的原因。你是否打开了编译器的c++11功能?@SiyuanRen在.pro文件中我添加了
QMAKE_cxflags+=-std=c++11
。当我在类似的.cpp文件中编译这段代码时,一切都很好。但我需要从.cpp生成.mm文件。