【发布时间】:2014-11-02 09:01:35
【问题描述】:
首先,这不是关于数组或运算符[] 重载的虚拟问题!
我正在尝试编译 Qt Creator,但在此方法中收到错误:
static QList<IDocumentFactory*> getNonEditorDocumentFactories()
{
return ExtensionSystem::PluginManager::getObjects<IDocumentFactory>(
[](IDocumentFactory *factory) {
return !qobject_cast<IEditorFactory *>(factory);
});
}
错误是:
mainwindow.cpp:748: error: expected primary-expression before ‘[’ token
mainwindow.cpp:748: error: expected primary-expression before ‘]’ token
mainwindow.cpp:748: error: expected primary-expression before ‘*’ token
mainwindow.cpp:748: error: ‘factory’ was not declared in this scope
我知道我在编译 Qt Creator 时做错了,可能是 g++ 版本,但问题不在于。
我想理解这段代码,因为对我来说,[] 的这种用法在语法上是不正确的。谁能解释一下这里发生了什么。
【问题讨论】:
-
这是一个 C++11 lambda:en.cppreference.com/w/cpp/language/lambda.
-
如果是 C++11 功能,您可能需要 gcc 4.8 或更高版本。 @Ian,这可能是一个更好的答案,因为它回答了特定的问题(“我想理解......”)。只要确保它不是仅链接的答案:-)
-
@paxdiablo;我大体上同意,但我现在不想写一个描述性的答案。当其他人这样做时,OP 可以开始浏览该链接(或查看 SO,现在他知道它是什么,因为 C++11 lambda 已经得到很好的讨论)。
-
欢迎使用现代 C++。现在您可以抛开所有特定于 Qt 的 hack。
标签: c++