我有一个小的lambda函数,它将查找并返回QTreeWidgetItem
。但是,如果找不到给定的项目,则它将返回nullptr
。但是,如果我尝试对其进行编译,则会给我一个错误。
功能:
auto takeTopLevelItem = []( QTreeWidget* aTreeWidget, const QString& aText )
{
const int count = aTreeWidget->topLevelItemCount();
for ( int index = 0; index < count; ++index )
{
auto item = aTreeWidget->topLevelItem( index );
if ( item->text( 0 ) == aText )
{
return aTreeWidget->takeTopLevelItem( index );
}
}
return nullptr; // This causes a compilation error.
};
错误:
我对此进行了更改,现在可以编译了:
return (QTreeWidgetItem*)( nullptr );
但我想避免使用这种语法。我该如何解决?
我使用
Visual Studio 2012
。 最佳答案
您可以添加一个显式的返回类型注释:
auto takeTopLevelItem = []( ... ) -> QTreeWidgetItem*
{
// ...
}
这样
nullptr
将被正确转换为您的指针类型。之所以会出现此错误,是因为lambda假定不进行任何转换,并将nullptr_t
视为合法的替代返回类型。作为旁注,请考虑改为使用
(std::)optional
。指针的可为空性可用于表示缺少的返回值,但这并不意味着一定如此。关于c++11 - 如何从Lambda函数返回nullptr?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30783007/