【问题标题】:Simple program won't compile with qtcreator简单的程序不能用 qtcreator 编译
【发布时间】:2011-11-02 12:46:06
【问题描述】:

我安装了 qt 4.7.4 和 gcc 4.6.1。我试图编译这个程序,但它不会为我编译:
为什么我不能编译这段代码?

#include <QApplication>
#include <iostream>
using std::cout;

int main(int argc, char** argv)
{
    QApplication app(argc,argv);
    int a[] = {1,2};
    for (auto e : a)
    {
        cout << e << '\n';
    }
    return app.exec();
}  

错误:
C:...\main.cpp:9: 错误:'e' 没有命名类型

【问题讨论】:

  • 当我说我们很抱歉听到这个消息时,我想我代表每个人。你的问题是什么?愿意告诉我们错误是什么吗?
  • @Widor 问题(隐含地)是为什么我不能编译它,但我会更新它。
  • 你用什么命令编译它? (您使用 c++11,因此您需要通过编译器标志告诉 g++:尝试g++ file.cpp --std=c++0x
  • 很可能你的编译器不理解这个新的 c++ 特性。
  • @Tom 我想把这些选项放在哪里(通过 QTCreator)

标签: c++ qt gcc


【解决方案1】:

for (auto e : a)
是来自 c++11 标准的基于范围的 for 循环。您需要在 gcc 中使用 -std=c++0x 命令行启用 c++11。

【讨论】:

  • 我想把这些选项放在哪里(通过 QTCreator)?
  • 我从未使用过 QtCreator。但是这个链接应该回答这个问题。 stackoverflow.com/questions/2987062/…
  • 是的,这似乎解决了问题,很遗憾您无法通过某些对话框进行设置。谢谢。
【解决方案2】:

对我来说这是可行的(g++ 4.6.1,Qt 4.7.1):

g++ --std=c++0x -I$QTDIR/include/QtGui -I$QTDIR/include \
    test.cpp -L$QTDIR/lib -lQtCore -lQtGui

【讨论】:

    【解决方案3】:

    您需要 --std=c++0x 编译器标志。

    【讨论】:

      【解决方案4】:

      我的猜测是 qtcreator(和 qmake)不会向编译器提供指示它使用 C++2011 的标志。

      【讨论】:

        【解决方案5】:

        首先,您要确保您的 C++ 文件是使用 C++11 方言编译的(即使用-std=c++0x 标志到g++),因为您使用了auto 类型推断功能。

        那么,我认为您的for 循环可能无效。也许您希望 a 成为 std::vector&lt;int&gt;

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-04-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-05-19
          • 1970-01-01
          相关资源
          最近更新 更多