7

次のコードは、Xcode 5 および Visual Studio 2013 でコンパイルおよび実行されます。Codelite を試すことに興味がありますが、Codelite は次のプログラムをコンパイルしません (プロジェクトでスコープ付き列挙型を使用しているため、問題が発生します)。私の知る限り、Codelite は Xcode と同じコンパイラを使用しています。

コードは C++11 ごとに有効ですか? Codelite でコンパイルできないのはなぜですか?

#include <iostream>

namespace abc
{
    namespace xyz
    {
        enum class SampleEnum
        {
            SomeValue = 0,
            SomeOtherValue = 1
        };
    }
}

int main(int argc, char **argv)
{
    abc::xyz::SampleEnum e = abc::xyz::SampleEnum::SomeValue;
    return 0;
}

Codelite からのビルド出力は次のとおりです。文字化けしている場合は、変数のインスタンス化で「SampleEnum」という単語を指しており、「クラスまたは名前空間が必要です」と言っています。

/bin/sh -c 'make -j8 -e -f  Makefile'
----------Building project:[ ClangTest - Debug ]----------
codelite-cc /usr/bin/clang++   -c  "/Users/xxx/Desktop/Test/ClangTest/main.cpp" -g -O0 -Wall  -o ./Debug/main.cpp.o -I. -I.
/Users/xxx/Desktop/Test/ClangTest/main.cpp:7:8: warning: scoped enumerations are a C++11 extension [-Wc++11-extensions]
                enum class SampleEnum
                     ^
/Users/xxx/Desktop/Test/ClangTest/main.cpp:17:40: error: expected a class or namespace
    abc::xyz::SampleEnum e = abc::xyz::SampleEnum::SomeValue;
                             ~~~~~~~~~~^
1 warning and 1 error generated.
make[1]: *** [Debug/main.cpp.o] Error 1
make: *** [All] Error 2
2 errors, 1 warnings
4

3 に答える 3

23

C++11 機能を有効にするには、コンパイラに -std=c++11 を渡す必要があります。Codelite でこれを行う手順は次のとおりです。

  • ワークスペース ビューでプロジェクトを右クリックします。
  • このポップアップ メニューの下部にある [設定] を選択します。共通設定 -> コンパイラ -> C++ コンパイラ オプション
  • セミコロンで区切られたコンパイラ スイッチのリストをクリックして省略記号を表示し、省略記号をクリックします。
  • -std=c++11 のチェックボックスをクリックします

プロジェクト設定ウィンドウのスクリーンショット

于 2015-02-28T17:48:36.493 に答える
4

C++11 拡張機能を使用している場合、コンパイラはフラグを立てたいと考えています。これがないと、警告やエラーが発生する可能性があります。これは、C++11 の変更の一部が下位互換性がないためです。たとえば、auto.

たとえば、gcc では次のようにする必要があります。

gcc -std=c++11

コンパイラにそのようなパラメータが必要でないかどうかを確認してください!

于 2015-02-28T07:39:51.590 に答える
0

これは、デフォルトの std バージョンが c++11 ではないためだと思います。c++11 に変更するには、ターミナルを使用している場合は、次のコマンドを入力する必要があります。

g++ yourfile.cpp -std=c++11
于 2016-07-11T03:35:06.033 に答える