Eclipse Juno / Kepler / LunaCDTでC ++ 11を有効にする方法は?


85

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

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

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

投稿の指示に従いました

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

そして、EclipseJunoに与えられたソリューションは機能していません。

さまざまなコメントが、日食の再開と清掃と再構築を示唆しています。それは違いを生みませんでした。

回答:


183

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

コンパイラの設定はかなり簡単です。

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

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

  1. プロジェクトを右クリックし、[プロパティ]をクリックします
  2. C / C ++ Generalの下で、「プリプロセッサインクルードパス、マクロ」をクリックします。
  3. [プロバイダー]タブを選択します
  4. リストには、「GCC組み込みコンパイラ設定」のような項目があるはずです。このエントリを選択します。
  5. [グローバルプロバイダーを使用する...]オプションのチェックを外します
  6. リストの下に、「コンパイラの仕様を取得するコマンド」というボックスがあります。これに「-std = c ++ 0x」を追加します。
  7. 右側の[上に移動]ボタンを使用して、リストの一番上にある[GCC組み込みコンパイラ設定]プロバイダーを移動します。
  8. [適用]、[OK]の順にクリックします。
  9. Eclipseワークスペースに戻り、[プロジェクト]メニューの[C / C ++インデックス]を選択して、[未解決のインクルードを再解決する]をクリックします。

1
ありがとうございました。これはうまくいきました。リンクした他の投稿を読み間違えたかもしれませんが、その投稿にはコンパイラの設定についての言及がなかったようです。
user327301 2013

1
私にはうまくいきません。私の主な問題は、未解決のc ++ 11インクルードです。私-std=c++11はあなたが置くと言った場所に入れて、完全なインデックスを再構築しましたが、まだ認識されないstd :: cout、std :: setなどのがらくたを示しています…
Dolanor 2013

2
編集:私はそれが必要な最初の部分を見つけられませんでした、しかし私はmakeを通してコンパイルしているので、それは説明かもしれません。(私はそれをワークスペース構成で見つけて設定しました)。しかし、私はそれをに入れましたcompiler spec、そしてそれでも動作しません。std :: shared_ptrと同じものが認識されません。以前はjunoを使用して古いマシンで動作していましたが。
Dolanor 2013

1
私の場合(gcc)は-std = c ++ 0xを使用しました。したがって、すべてが機能しています。ありがとうございました!
デニスザイキン2013年

4
@MrEricSirは、ワークスペースにこの設定を行う方法があり、新しいプロジェクトを追加すると、プロジェクトにも自動的に適用されますか?
Ivaylo Strandjev 2014

25

Eclipse KeplerServiceリリース1でのC ++ 11のサポート(ビルドID:20130919-0819)

最新リリースのEclipseKepler SR1では-std = c ++ 11を追加するだけで済みます。

  1. プロジェクトを右クリックし、[プロパティ]をクリックします
  2. 移動し、C / C ++の一般的プリプロセッサはパス、マクロなどを含めます
  3. [プロバイダー]タブを選択します
  4. コマンドに-std = c ++ 11を追加して、コンパイラの仕様を取得します。
  5. 変更を適用すると、インデックスが自動的に生成されます。

「コマンドコンパイラスペックを取得するには:」 -lineは次のようになります。

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

2
GCCでは、-std = c ++ 0xを追加する必要がありました
2014

どのGCCを使用していますか?c ++ 0Xは、C ++ 11の古い名前(エイリアス)でした
MeJ 2014年

1
新鮮なEclipseCDTをセットアップするのは、これが2度目です。これをセットアップする方が直感的です。
2014年


6

私はEclipseKeplerを使用し、それを修正するためにこれを行いました:

1-プロジェクトを右クリック>>プロパティ>> C / C ++ビルド::設定

2-GCC G ++コンパイラに移動>>その他>>その他のフラグ

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

それで私の問題は解決しました!

お役に立てば幸いです。


これは、Eclipse Platform、バージョン:4.3.1のベストアンサーです-Kepler / Junoが何であるかわからない!
TCSGrad 2014年

Eclipseのケプラーは、Eclipseのバージョン4.3.Xである
Karrq

4

ここでEclipseインディゴとcdt8.0.2を実行しています。私はすべてのガイドに従いましたが、std :: unique_ptrのようなものを見つけるには、プリプロセッサ定義を手動で設定する必要がありました。インクルードファイル「メモリ」はこれをチェックします。プロジェクトプロパティの「C ++ General」の「PathsandSymbols」の下にある「Symbols」タブで__cplusplusを201103Lに設定します。


はい、古いプロジェクトからの移行で機能します。
ガイL

2

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


1

Eclipse Lunaを使用していますが、C / C ++ビルド->設定の下に「ツール設定」がありません。私はDID提案として「>プロバイダ- - >プリプロセッサが含まれてC / C ++一般」の下に、コンパイラスペックコマンドラインに-std = C ++ 11を追加します。しかし、それでもemplace()を解決するインデクサーの能力を満足させることはできませんでした。

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

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


0

MrEricSirが提供するソリューションは、最新のEclipse OxygenCDTがインストールされた後にのみ機能します。火星CDTでは機能しません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.