Qt中基于范围的循环出错

Posted

技术标签:

【中文标题】Qt中基于范围的循环出错【英文标题】:Error with range based loop in Qt 【发布时间】:2014-11-09 17:52:40 【问题描述】:

得到这些错误:

C2143: syntax error : missing ',' before ':'  
C2143: syntax error : missing ';' before ''

代码如下:

 void MainWindow::PrintDir(const QString &str)
    
        QDir mDir(str);
        QString buffer;
        for(QFileInfo temp :  mDir.entryInfoList()) //first error
                                                   //second error
            buffer += temp.absoluteFilePath() + "\n";
        
        ui->textEdit->setText(buffer);
    

我猜原因是 C++ 标准?我尝试将他包含在这样的专业文件中 CONFIG += c++11 但没有任何反应,仍然出现相同的错误。怎么了?

UPD

【问题讨论】:

你的编译器是什么? @Nazar554 来自错误IDs 似乎是cl 为什么不直接使用 Qt 的 foreach 循环? 【参考方案1】:

正如here 解释的那样,似乎MSVC 2010 支持C++ 11 range-based for loops。这就是您收到此错误的原因。如果你想使用C++11 range-based for loops,我建议你升级到MSVC 2012

【讨论】:

从技术上讲,这是用于构建 Creator 使用的 Qt 库的编译器。 OP 用来编译他/她的剪辑的编译器可能是完全不同的。 @peppe 我对此表示怀疑,他得到的错误代码来自 VS,只有 2010 年及更低版本存在基于范围的问题(更不用说跨 Visual Studio 版本链接纯 C 以外的任何内容)首先是为了麻烦) @peppe 你是对的!但是考虑到他遇到的错误的复杂程度,我认为他只是从qt-project.org 安装了Qt 5.3.2 for Windows 32-bit (VS 2010, OpenGL, 539 MB),它使用了与它使用的相同版本的Qt 编译的Qt Creator。如果这不是真的,我正在等待提供更多信息,但我 99% 确定这就是发生的事情。 @PeterT:我不是说 “使用的编译器不可能是 MSVC 2010” :-) 我是说您在该对话框中看到的编译器可能是不同于用于编译程序的一个 OP。 谢谢。但是现在如何将 2012 包含到 Qt 中呢?

以上是关于Qt中基于范围的循环出错的主要内容,如果未能解决你的问题,请参考以下文章

C++基于范围的for循环详解

如何使用基于范围的 for 循环修改地图中的值?

Visual Studio 中基于 For 循环的 C++17 广义范围

如何在 std::map 中使用基于范围的 for() 循环?

如何在 std::map 中使用基于范围的 for() 循环?

临时范围上的基于范围的for循环[重复]