C++ Qt:Wshadow嵌套foreach上的警告

C++ Qt:Wshadow嵌套foreach上的警告,c++,qt,foreach,compiler-warnings,C++,Qt,Foreach,Compiler Warnings,我在Qt项目上启用了编译器标志“-Wshadow”。现在,对于项目中的每个嵌套foreach循环,我都会得到一个警告。看起来,foreach宏使用的标识符在嵌套的foreach循环中重复 快速示例: QStringList listA, listB; foreach (QString a, listA) { foreach (QString b, listB) { qDebug() << a << b; } } QStringList列表

我在Qt项目上启用了编译器标志“-Wshadow”。现在,对于项目中的每个嵌套foreach循环,我都会得到一个警告。看起来,foreach宏使用的标识符在嵌套的foreach循环中重复

快速示例:

QStringList listA, listB;
foreach (QString a, listA) {
    foreach (QString b, listB) {
        qDebug() << a << b;
    }
}
QStringList列表a、列表b;
foreach(QString a,listA){
foreach(QString b,listB){

qDebug()
foreach
宏创建一个变量
\u容器
,如果嵌套另一个
foreach
宏,那么在不同的作用域中会有两个同名的变量,内部作用域中的变量将外部作用域中的变量隐藏起来。也许您应该尝试改用它?为什么不直接使用
c++11
f或者为此?或者尝试一下
BOOST\u FOREACH
。实际上,它们都不如
c++11
的FOREACH好,但是..看看下面的讨论:
Test.cpp:46:9: warning: declaration shadows a local variable [-Wshadow]
        foreach (QString b, listB) {
        ^
/usr/include/qt5/QtCore/qglobal.h:911:21: note: expanded from macro 'foreach'
#    define foreach Q_FOREACH
                    ^
/usr/include/qt5/QtCore/qglobal.h:857:47: note: expanded from macro 'Q_FOREACH'
for (QForeachContainer<__typeof__(container)> _container_(container); \
                                              ^
Test.cpp:45:5: note: previous declaration is here
    foreach (QString a, listA) {
    ^
/usr/include/qt5/QtCore/qglobal.h:911:21: note: expanded from macro 'foreach'
#    define foreach Q_FOREACH
                    ^
/usr/include/qt5/QtCore/qglobal.h:857:47: note: expanded from macro 'Q_FOREACH'
for (QForeachContainer<__typeof__(container)> _container_(container); \
                                              ^