web-dev-qa-db-ja.com

Eclipse CDTインデクサーはC ++ 11コンテナーを認識しません

Eclipse CDTでgcc-4.7を使用するようにC++ 11プロジェクトを構成しました。私のシステムでは、C++ 11をサポートしていないデフォルトのコンパイラではありません。コンパイルが機能するためには、フラグ-std=c++11を渡し、次のヘッダーパスを含める必要があります:/usr/local/Cellar/gcc/4.7.2/gcc/include/c++/4.7.2

std::unordered_setstd::unordered_mapなどのC++ 11コンテナタイプを使用すると、CDTインデクサーはSymbol unordered_set could not be resolvedのエラーを出します。これらのシンボルを正しく解決するようにインデクサーに指示するにはどうすればよいですか?

これが、インデクサーの構成方法です。

enter image description here

設定を理解している限り、インデクサーは現在アクティブなビルド構成のコンパイラー設定を使用することになっています。コンパイルは正常に動作しますが、なぜインデックスも作成されないのですか?

47
clstaudt

このフォーラムの投稿で説明されているように:

http://www.Eclipse.org/forums/index.php/mv/msg/282618/

  • プロジェクトを右クリックして、[プロパティ]に移動します。C/ C++全般->パスとシンボル->シンボル-> GNU C++。
  • [追加...]をクリックして貼り付けます__GXX_EXPERIMENTAL_CXX0X__を「名前」に入力し、「値」を空白のままにします。 [適用]をクリックし、要求された操作をすべて実行し、[OK]をクリックします。
36
user2485710

セットアップ**__GXX_EXPERIMENTAL_CXX0X__**は私の場合は役に立ちません(2014年7月、Eclipse Kepler 20130919、Ubuntu 12.04)。

C++ 11構文の強調表示を修正するには、以下にアクセスしてください。

プロジェクトプロパティ-> C/C++全般->パスとシンボル->シンボル-> GNU C++

シンボルを上書きします(つまり、新しいシンボルを追加します):

__cplusplus

価値あり

201103L

PDATED:新しいバージョンのEclispe(2016年時点)を使用しても同じ問題が発生する場合は、値を試してください(jose.diegoが指摘):

201402L

プロジェクト設定でインデクサーが有効になっていることを確認します(C/C++一般->インデクサー

次に、インデックスを再作成します(プロジェクト-> C/C++インデックス->再構築

それでも問題が解決しない場合は、再度インデックスを作成してください。これで動作するはずです。

81
selyunin

ラッキーグーグルで最近この問題を解決しました。

プロジェクトをクリックして右クリックし、[プロパティ]

選択 "C/C++全般->プロセッサインクルードパス、マクロなど..."

選択「プロバイダー」タブ

選択解除すべて除く「CDTユーザー設定エントリ」および「CDT GCC組み込みコンパイラー設定」

クリック「CDT GCC組み込みコンパイラー設定」

選択解除「プロジェクト間で共有されるグローバルプロバイダーを使用する」

編集「コンパイラの仕様を取得するコマンド」というラベルの付いた下部のボックス

Insertをコマンド-std = c ++ 11に追加すると、次のようになります。

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

クリック適用してOK。

enter image description here

それは私のために働いた。おそらくプロジェクトのインデックスを再作成する必要があります。

47
Galik

またはに移動します。

  • C/C++ Build-> Discovery Options-> GCC C++ Compiler

  • コンパイラー呼び出し引数にフラグを追加します。 -std = c ++ 11 -m32など

  • 発見されたエントリを今すぐ消去:[消去]をクリックします

  • プロジェクトを再構築する

その後、すべてのシンボルが正しい値で更新され、インデクサーは意図したとおりに動作するはずです

9
user1283078

外部ビルダーを使用するプロジェクトでの回避策は、シンボルを定義することでした:

__cplusplus

値を持つ:

201403

プロジェクトの:パスとシンボル->シンボル/ GNU C++。

これはEclipse Kepler CDTバージョン8.3.0.201402142303で機能しました。

6
Afilu

このガイド を参照してください:

  1. C/C++ Build-> Settings-> GCC C++ Compiler-> Dialect
  2. 「言語標準」で「ISO C++ 11(-std = c ++ 0x)」を選択します Language and dialect
  3. 適用してOK
  4. プロジェクトを再構築すると動作します:)
2
Yojiaku

以下はEclipseC/C++Oxygen。2 with gcc-5.5.0で動作します

Eclipse Properties->C/C++ Build->Settings->GCC C++ Compiler->Dialect->Other dialect flags: -std=c++17

Language standardドロップダウンリストで何も選択しないでください。

1
caot

次の構成は、元の質問で示された問題を修正するのに役立ちます。

環境:Eclipse(Oxygen.3aリリース(4.7.3a))、Cygwin64。 Cygwinの異なるバージョンを使用している場合、次のように同様のディレクトリを見つけることができます。

手順1:次の2つのディレクトリがあることを確認します。

   C:\cygwin64\lib\gcc\x86_64-pc-cygwin\7.4.0\include
   C:\cygwin64\lib\gcc\x86_64-pc-cygwin\7.4.0\include\c++

上記の2つのディレクトリが表示されない場合は、Cygwinセットアッププログラムを起動して、gcc-core、gcc-g ++、およびlibgcc1をインストールしてください。

ステップ2:ディレクトリをコピーしますC:\cygwin64\lib\gcc\x86_64-pc-cygwin\7.4.0\includeからC:\cygwin64\usr上記の2つのインクルードディレクトリが表示されない場合。

ステップ3:プロジェクトプロパティ-> C/C++全般->パスとシンボルに移動します。次の2つのパスがリストされていることを確認してください。

   C:\cygwin64\usr\include
   C:\cygwin64\usr\include\c++

ステップ4:プロパティ-> C/C++ビルド/設定/ Cygwin PEパーサーの選択

ステップ5:プロパティ-> C/C++ビルド/ツールチェーンエディターCygwin GCCを選択

ステップ6:Property-> C/C++ General/Indexer Enable indexerを選択します

ステップ7:Project-> C/C++ Index->​​ Rebuild

これで、EclipseがC++ 11型を表示できるようになります。

0
q0987