web-dev-qa-db-ja.com

Eclipse Juno / Kepler / Luna CDTでC ++ 11を有効にする方法

編集:これは本当にEclipse Keplerに固有のものではないことがわかりました。 Eclipse Junoでも同じプロセスを使用する必要がありました。問題は、この同じ質問に答える他の投稿に欠落しているステップがあるように見えることでした。

Eclipse Kepler for C++を使用していますが、C++ 11を使用しようとしてエラーが発生しています。コンパイルするとエラーが発生します

エラー:範囲ベースのforループはC++ 98モードでは許可されません

私は投稿からの指示に従った

Eclipse CDT C++ 11/C++ 0xサポート

また、Eclipse Junoに提供されているソリューションは機能していません。

さまざまなコメントから、Eclipseの再起動とクリーニングと再構築が提案されています。違いはありません。

86
user327301

2つのことを行う必要があります。最初にコンパイラをセットアップする必要があり、次にCDTの言語プロセッサをセットアップする必要があります。使用しているコンパイラについては言及しなかったため、GCCであると想定しますが、手順は他のコンパイラでも同様です。 (もちろん、C++ 11をサポートするコンパイラが必要なことに注意してください。)

コンパイラのセットアップは非常に簡単です。

  1. プロジェクトを右クリックし、[プロパティ]をクリックします
  2. C/C++ Buildの下のSettingsをクリックします
  3. GCC C++コンパイラで、[その他]をクリックします
  4. [その他のフラグ]ボックスで、トークンのリストに「-std = c ++ 11」を追加します。
  5. [適用]をクリックして[OK]

この時点で、プロジェクトを再構築して実行できるようになります。ただし、CDTはC++ 11インクルードのエラーを表示する場合があります。これを解決する方法は次のとおりです。

  1. プロジェクトを右クリックし、[プロパティ]をクリックします
  2. C/C++ Generalの下で、「Preprocessor Include Paths、Macros」をクリックします
  3. [プロバイダー]タブを選択します
  4. リストに「GCC Built in Compiler Settings」などのような項目があるはずです。このエントリを選択します。
  5. [グローバルプロバイダーを使用...]オプションをオフにします。
  6. リストの下には、「コンパイラの仕様を取得するためのコマンド」と書かれたボックスがあります。これに「-std = c ++ 0x」を追加します。
  7. 右側の[上に移動]ボタンを使用して、リストの上部にある[GCC Built in Compiler Settings]プロバイダーを移動します。
  8. [適用]、[OK]の順にクリックします。
  9. Eclipseワークスペースに戻り、[プロジェクト]メニュー、[C/C++インデックス]を選択し、[未解決のインクルードを再解決]をクリックします。
185
MrEricSir

Eclipse Kepler Service Release 1でのC++ 11サポート(ビルドID:20130919-0819)

最新リリースのEclipse Kepler SR1では、追加する必要があるのは-std = c ++ 11

  1. プロジェクトを右クリックして、Propertiesをクリックします
  2. C/C++ GeneralおよびPreprocessor Include Paths、Macrosなどに移動します
  3. Providersタブを選択します
  4. -std = c ++ 11に追加して、コンパイラの仕様を取得するコマンド:
  5. 変更を適用すると、インデックスが自動的に生成されます。

"コンパイラの仕様を取得するコマンド:"-行は次のようになります。

${COMMAND} -E -P -v -dD "${INPUTS}" -std=c++11
25
MeJ

CDT 8.3( Keplerアップデートとして利用可能 )では、ビルド設定に新しい方言オプションがあります:

http://wiki.Eclipse.org/CDT/User/NewIn83#Build

13
Tobu

私はEclipse Keplerを使用して修正しました:

1-プロジェクト>>所有者>> C/C++ビルド::設定を右クリック

2-GCC G ++コンパイラにアクセス>>その他>>その他のフラグ

 i then added -std=c++11 
 hit apply and ok

これで問題が解決しました!

お役に立てば幸いです!

6
LandKingdom

Eclipse Indigoとcdt 8.0.2の実行はこちら。私はすべてのガイドに従いましたが、std :: unique_ptrのようなものを見つけるには、手作業でプリプロセッサ定義を設定する必要がありました。インクルードファイル「メモリ」はこれをチェックします。プロジェクトプロパティの[C++ General]の[Paths and Symbols]の下にある[Symbols]タブで、__ cplusplusを201103Lに設定します。

4
David Karla

方言フラグ "-std = c ++ 11"をプロジェクトプロパティに追加-> C/C++ビルド->設定->ツール設定(GCC C++コンパイラ->方言)は、上記の設定とは別に、Eclipse Keplerの問題を解決しました。

2
mluthra

Eclipse Lunaを使用していますが、C/C++ Build-> Settingsの下に「Tool Settings」がありません。 I DID提案どおり、「C/C++ General-> Preprocessor Includes-> Providers」の下のコンパイラ仕様コマンドラインに-std = c ++ 11を追加します。しかし、それでもインデクサーのemplace()を解決する能力を満たしていませんでした。

そのため、ヘッダーファイルを調べて、emplace関数が__cplusplus> = 201103Lに依存していることがわかりました。そこで、プリプロセッサシンボル「__cplusplus」を追加し、値201103を指定しました。

ちょっとハックしますが、インデクサーは幸せです。 (そして、メイクファイルは、Eclipseプロジェクトではなく、ビルドフラグを定義します)

1

MrEricSirが提供するソリューションは、最新のEclipse Oxygen CDTをインストールした後にのみ機能します。 Mars CDTを使用する場合は機能しません。

0
StndFish