2014-09-11 145 views
-3

我想在使用connect函数时使用Qt中的lambda表达式。
我的代码是这样的:在lambda表达式中使用Void表达式错误无效

for(int i = propertyToNodeMap.size() -1 ; i >= 0 ; --i) 
    { 
     connect(&mainDialog,mainDialog.accepted(),[=](){ 
       ; //sth .... 
     }); 
    } 

我使用Qt 5.3和MinGW为编译器在Windows 7
的错误信息是:

error: invalid use of void expression 
     }); 
     ^

而且我用Qt文档和here作为参考来实现这段代码。 问候,

+0

在C++中没有'foreach'。 – 2014-09-11 07:46:39

+0

@AntonSavin Qt创建者有这个选项,你可以使用它作为容器,它是框架特性之一。看看http://qt-project.org/forums/viewthread/15487 – bahrami307 2014-09-11 07:48:52

+0

@AntonSavin http://qt-project.org/doc/qt-4.8/containers.html – bahrami307 2014-09-11 07:57:24

回答

-1

的问题既不是涉及到lambda表达式,也foreach语句(一个谁最后一版之前评论的问题,现在删除)或'某事”的一部分。
连接的正确形式是这样的:

connect(&mainDialog,&mainDialog.accepted(),[=](){ // missing '&' 
       ; //sth .... 
     }); 
0

connect需要一个指向成员函数:

connect(&mainDialog, &DialogClass::accepted, [=](){ 
    ; //sth .... 
}); 

我假定DialogClass是其中mainDialog是一个实例的类。

+0

我认为第二个不起作用。因为'SIGNAL(...)'将'...'转换为'const char *'我想。 – bahrami307 2014-09-17 13:10:23

+0

是的,'SIGNAL'版本不允许连接到lambda,谢谢你的更正。 – Oktalist 2014-09-17 14:36:08