Qt中的foreach有啥问题?
Posted
技术标签:
【中文标题】Qt中的foreach有啥问题?【英文标题】:What is wrong with foreach in Qt?Qt中的foreach有什么问题? 【发布时间】:2015-11-13 15:10:16 【问题描述】:嗯,我都试过了。这应该很简单,但我很想知道我的 foreach 到底发生了什么。它只是没有帮助。
#include <QCoreApplication>
//coreapplication or Qapplication the error is there
#include <QList>
#include <QDebug>
int main()
QList<int> list;
list << 1 << 2 << 3 << 4 << 5;
foreach (int i, list) //expected token ';' got 'int'.
qDebug() << i;
/*
QT += core gui
TARGET = QtTest
CONFIG += console
CONFIG -= app_bundle
CONFIG += no_keywords
TEMPLATE = app
SOURCES += main.cpp
*/
【问题讨论】:
在我的情况下它工作正常,Qt 5.2。你的qt版本是多少?您还为每种语法尝试过 C++11 吗? 5.5.1....我看网站和qt助手一样,O_o一样... 也许foreach
已为您的设置禁用。请改用Q_FOREACH
。
【参考方案1】:
您在配置中指定了no_keywords
。您必须使用Q_FOREACH
而不是foreach
。请参阅documentation 获取foreach
。
话虽如此,我会切换到基于 C++11 范围的for
,因为它在类型中没有逗号问题。例如,
Q_FOREACH (QPair<int, int> p, pairList)
不会编译,因为预处理器认为您正在尝试使用 3 个参数而不是 2 个参数调用宏。
【讨论】:
可以使用 typedef 解决逗号问题,但是是的,如果可以使用基于范围的 for 是首选。 有趣的是,我得到了同样的错误,但我有正确的项目配置。不仅如此,foreach 适用于 Qt 容器,但不适用于包含 int 等原始类型的数组【参考方案2】:您可以改为使用C++11 for(:)
:
for(int i:list)
qDebug() << i;
请注意,您必须使用C++-11
标志进行编译,因此将此行添加到您的项目文件中:
QMAKE_CXXFLAGS += -std=c++11
请注意,C++11 for
比 Qt foreach
更高效,如下所示:Qt foreach loop ordering vs. for loop for QList
编辑: 就像 Frank Osterfeld 评论的那样,您也可以使用:
CONFIG+=c++11
在您的 .pro
文件中,自 Qt 5.4 起如下评论:How to use C++11 in your Qt Projects.
【讨论】:
是的,那个似乎也不起作用,它给了我一个错误:C++ 98 模式下不允许基于范围的“for”循环。 nvm.. 我错过了这一步.. 是的,它可以工作,但仍然......我想用 foreach 练习,但令人惊讶的是它在我的机器上不起作用。 我会使用 CONFIG+=c++11 而不是 "QMAKE_CXXFLAGS += -std=c++11"以上是关于Qt中的foreach有啥问题?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Qt 中将 foreach 与 QDomNodeList 一起使用?