Eclipse 3.7.1 CDT 1.4.1 GCC 4.6.2
これは、C++ 11コードの一例です。
auto text = std::unique_ptr<char[]>(new char[len]);
Eclipseエディタは次のように文句を言う。
Function 'unique_ptr' could not be resolved
Makefileのコンパイルはうまくいきます。 Eclipseに、この種のエラーについての苦情を止めさせるにはどうすればよいですか?
私はEclipseフォーラムで this という記事を見つけました。それらのステップに従っただけで、それは私のために働きます。私はWindows上でCygwinの設定でEclipse Indigo 20110615-0604を使用しています。
-std=c++0x
(または新しいコンパイラバージョン-std=c++11
を最後に入れてください。Cygwinコンパイラもあります。__GXX_EXPERIMENTAL_CXX0X__
(必ず2つのアンダースコアを追加して追加)を貼り付け、[値]を空白のままにします。Eclipse FAQにもこれに関する説明があります。 Eclipse FAQ/C++ 11 Features 。
まず、プロジェクトを作成する前に、Eclipseシンタックスパーサーを設定します。
Window
- > Preferences
- > C/C++
- > Build
- > Settings
- > Discovery
- > CDT GCC Build-in Compiler Settings
Command to get compiler specs
というタイトルのテキストボックスに、-std=c++11
を追加します。
これでプロジェクトを作成できます。構成は作成したプロジェクトの種類によって異なります。
ファイル - >新規 - >プロジェクト - > C/C++ - > C++プロジェクトのように作成されたプロジェクトの場合
作成したプロジェクトを右クリックして開きます
Properties
- > C/C++ Build
- > Settings
- > Tool Settings
- > GCC C++ Compiler
- > Dialect
-std=c++11
というタイトルのテキストボックスにother dialect flags
を入力するか、ISO C++11
ドロップダウンからLanguage standard
を選択します。
CMakeプロジェクト用
プロジェクト内でEclipseプロジェクトファイルを生成します。
mkdir build
cd build
cmake -G"Eclipse CDT4 - Unix Makefiles" -D CMAKE_BUILD_TYPE=Debug ..
その後、生成されたディレクトリを標準のEclipseプロジェクトとしてEclipseにインポートします。プロジェクトを右クリックして開きます
Properties
- > C/C++ General
- > Preprocessor Include Paths, Marcos etc.
- > Providers
CDT GCC Build-in Compiler Settings
を有効にしてContributed PathEntry Containers
より上に移動する(これは重要です)
最後の共通ステップ
Project
- > C/C++ Index
を再コンパイルして再生成し、Eclipseを再起動してください。
アップデート2016:
gcc 6 ( の変更点 )では、デフォルトのC++言語はCです。 ++ 14。つまり、より新しいまたは古い方言が明示的に必要でない限り、もうEclipseで何もする必要はありません。
このコミュニティWikiセクションにはTrismegistosによる回答が組み込まれています。
1。プロジェクトを作成する前に、Eclipseシンタックスパーサーを設定します。
「ウィンドウ」 - >「設定」 - >「C/C++」 - >「ビルド」 - >「設定」 - >「ディスカバリー」 - >「CDT GCC組み込みコンパイラー設定」
[コンパイラの仕様を取得するためのコマンド]というテキストボックスに、-std=c++14
を追加します。プロジェクトを作成します。構成は作成したプロジェクトの種類によって異なります。
ファイル - >新規作成 - >プロジェクト - > C/C++ - > C++プロジェクトのように作成されたプロジェクトの場合
作成したプロジェクトを右クリックして開きます
[プロパティ] - > [C/C++ビルド] - > [設定] - > [ツール設定] - > [GCC C++コンパイラ] - > [方言]
他の方言フラグと題されたテキストボックスに-std=c++14
を入れるか、言語標準ドロップダウンからISO C++ 11を選択してください。
最新バージョンの場合:(現在 ジュノとケプラー ルナ):
Junoの新しいバージョンでは、設定はProject properties -> C/C++ General -> Preprocessor Include Paths, Macros etc. -> tab Providers -> CDT GCC Builtin Compiler Settings ()
にあります。
旧バージョン2012/2013:
(プロジェクト設定時の)C/C++ビルドの下で、プリプロセッサインクルードパスを見つけて、プロバイダタブに移動します。 CDT GCC Builtin Compiler Settings以外のすべての選択を解除します。次に[共有設定のエントリ]のタグを解除します。 Commandというテキストボックスにオプション-std = c ++ 11を追加して、コンパイラの仕様を取得します。
パスとシンボルに行きます。 [記号]の下の[デフォルトに戻す]をクリックしてから、適用します。
注:
Eclipseはapplyを打つことにこだわっています。設定タブを離れるたびにそれを実行する必要があります。
[自己宣伝]:私は上記に基づいて私自身のより詳細な指示を書きました。 http://scrupulousabstractions.tumblr.com/post/36441490955/Eclipse-mingw-builds
https://stackoverflow.com/a/13635080/1149664 のユーザーNobody
に感謝します
最新の(Juno)Eclipse cdtでは、以下が私のために働きました。私自身で__GXX_EXPERIMENTAL_CXX0X__
を宣言する必要はありません。これはCDTインデクサーとコンパイラのパラメータとして機能します。
「あなたのプロジェクト名」 - >右クリック - >プロパティ:
C/C++全般 - >プリプロセッサインクルードパス、マクロなど - >「プロバイダ」という名前のタブに切り替えます。
"Configuration"のために "Release"を選択します(そしてその後 "debug")。
すべてのプロバイダーをオフにして、「CDT GCC組み込みコンパイラー設定」を選択するだけです。
「プロジェクト間で設定エントリを共有する(グローバルプロバイダ)」のチェックを外します。
"コンパイラの仕様を取得するためのコマンド"の中で:引用符なしで "add" -std = c ++ 11 "(引用符でも動くかもしれません)
適用を押してオプションを閉じる
インデックスを再構築する
これで、すべてのc ++ 11関連のものがインデクサーによって正しく解決されるはずです。
win7 x64、cdt mingw-w64 gcc 4.7.2 をsourceforge上の最新の公式Eclipse
私のEclipse Junoでも同じ問題がありました。これらのステップは問題を解決しました:
Project -> Properties -> C/C++ General -> Path and Symbols -> Tab [Symbols]
に行きます。Eclipse CDT Keplerにとって、未解決のstd::thread
シンボルを取り除くのに役立ったのは、次のとおりです。
「設定」 - >「C/C++」 - >「ビルド」 - >「設定」の順に選択します。
検出タブを選択します
CDT GCC組み込みコンパイラ設定を選択します[共有]
次のように、「コンパイラの仕様を取得するコマンド」フィールドに-std = c ++ 11を追加します。
$ {COMMAND} -E -P -v -dD -std = c ++ 11 $ {INPUTS}
プロジェクトへの-std=c++11
の追加Properties/C/C++ Build->Settings->Tool Settings->GCC C++ Compiler->Miscellaneous->Other
FlagsはKeplerには不十分ですが、Heliosなどの古いバージョンには十分でした。
私はまだコメントできないので、私自身の答えを書いています:
これは__GXX_EXPERIMENTAL_CXX0X__
に関連しており、Eclipse JunoとCDT 8.xに有効です。
この答えのいくつかの部分は他の答えで既にカバーされていますが、私はそれが首尾一貫していることを望みます。
Stdc ++ 11を使用してビルドすることを可能にするためには、コンパイラに特定のフラグを追加する必要があります。あなたはプロジェクトのプロパティを介してそれを行うことができます。プロジェクトプロパティRMB
とProject properties
またはALT + ENTER
を変更する。それからC/C++ビルド - >設定 - >ツール設定 - > GCC C++コンパイラ - >その他 - >その他のフラグ。行末に-std = c ++ 11と入力します。GCCの場合、-c -fmessage-length=0 -std=c++11
のようになります。 -stdc ++ 11フラグコンパイラ(GCC)を追加することで、__GXX_EXPERIMENTAL_CXX0X__
を単独で宣言します。
この時点で、C++ 11の長所をすべて使ってプロジェクトを構築できます。
問題はEclipseがエラーをチェックするための独自のパーサを持っているということです - それはあなたがまだ何もせずにプロジェクトをビルドして実行できると同時にあなたがまだEclipseエディタですべての厄介なエラーを得ている理由です。プロジェクトに__GXX_EXPERIMENTAL_CXX0X__
フラグを明示的に宣言することでこの問題を解決する方法があります(Carsten Greinerが言ったように)、それができます:C/C++一般 - >パスと記号 - >記号 - > GNU C++ [追加]をクリックし、__GXX_EXPERIMENTAL_CXX0X__
(2つのアンダースコアを追加して追加します)を[名前]に貼り付け、[値]を空白のままにします。そして今、私が最初の答えへのコメントでカバーしたかった余分な部分は、行ってください:C/C++一般 - >プリプロセッサインクルードパスマクロなど - >プロバイダー、そしてCDT Managed Build Setting Entries
を選択し、そしてAPPLYをクリックしてEntriesタブに戻ります。 GNU C++がCDT管理ビルド設定エントリに追加されました。定義されている場合は__GXX_EXPERIMENTAL_CXX0X__
が定義されているかどうかを確認します - > APPLYとインデックスを再構築します。
私にもいくつかの問題がありました(Ubuntu 13.04 64ビット、g ++ - 4.8、Eclipse Juno 3.8.1、CDT 6.0.0)。多くのことが上で述べられています、それらを繰り返して申し訳ありませんが、さらに私は利用して問題を抱えていました
std::thread
c ++ 11の一部として(リンカに-pthreadを追加すると、この問題は解決します)。とにかく、ついにこれらの設定はうまくいきました:
「プロジェクト」 - >「プロパティー」 - >「C/C++ビルド」 - >「設定」 - >「その他」。を追加
-std=c++11
gCCおよびG ++コンパイラ用のフラグ。適用をクリックします。
リンカについては、同じウィンドウ、その他、リンカフラグ、
-pthread
フラグ共有ライブラリ設定、共有オブジェクト名、
-Wl,--no-as-needed
フラグも。適用をクリックします。
C/C++全般 - >パスとシンボル - >シンボルTAB、GNU C++を選択、追加
__GXX_EXPERIMENTAL_CXX0X__
(値なし)
フラグ適用をクリックします。
C/C++全般 - >プリプロセッサインクルードパス.. - >プロバイダタブ:チェック
CDT GCC組み込みコンパイラ設定
「コンパイラの仕様を取得するためのコマンド」に、
-std=c++11
フラグShareのチェックを外します。適用をクリックします。
CDTはビルド設定エントリを管理します。これもチェックしてください。他の2つのチェックを外します。適用をクリックします。
[エントリ]タブの[GNU C++ CDT管理ビルド設定エントリに戻ると、追加したエントリが表示されているはずです。
__GXX_EXPERIMENTAL_CXX0X__
エントリ。
それでおしまい。コーディング時には
std::
たとえば、スレッドクラスを自動補完することができるようになりました。
std::system_error'what(): Enable multithreading to use std::thread: Operation not permitted
実行時に.
ファイルにC++ 11メモリヘッダが含まれていても、Eclipse C/C++はシンボルstd::unique_ptr
を認識しません。
GNU C++コンパイラを使用していると仮定すると、これは私が修正したことです。
[プロジェクト] - > [プロパティ] - > [C/C++全般] - > [プリプロセッサインクルードパス] - > GNU C++ - > CDTユーザー設定エントリ
[追加]ボタンをクリックしてください。
ドロップダウンメニューから[プリプロセッサマクロ]を選択します
Name: __cplusplus Value: 201103L
ApplyをクリックしてからOKをクリックしてプロジェクトに戻ります。
それからあなたのC++インデックスを再構築します。プロジェクト - > C/C++インデックス - >再構築
それが私だけで、最高ランクの解決策が私にはうまくいかない、私のEclipseバージョンはSudo apt-get install EclipseをUbuntuにインストールすることによってインストールされた単なる通常のEclipseプラットフォームです。最高ランクのソリューションと2番目のソリューションの両方から、うまく機能させるために私がしたことを以下に説明します(簡単にするためにC++プロジェクトの作成などの他のステップは無視されることに注意してください)。
C++プロジェクトを作成したら
(1)C/C++全般 - >パスと記号 - >記号 - > GNU C++。 [追加]をクリックし、 GXX_EXPERIMENTAL_CXX0X (必ず2つのアンダースコアを追加して先頭に追加)を[名前]に貼り付け、[値]を空白のままにします。
(2)(プロジェクト設定時の)C/C++ビルドの下で、プリプロセッサインクルードパスを見つけてプロバイダタブに移動します。 CDT GCC Builtin Compiler Settings以外のすべての選択を解除します。次に[共有設定のエントリ]のタグを解除します。 Commandというテキストボックスに-std = c ++ 11オプションを追加して、コンパイラの仕様を取得します。
上記の2と2だけのステップを実行した後、それは動作します、Eclipseはunique_ptrを解決することができます、私はなぜこのソリューションが動作するのかわかりません、それが人々を助けることができると思います。
私にはEclipse Neonをフォローしました Trismegistos上記の答え 、まだ追加のステップを追加しました。
適用してOKをクリックしてください。
乾杯、
男。
Eclipse LunaでC++ 14をサポートするには、以下のステップを実行できます。
C++ General -> Preprocessor Include -> Providers -> CDT Cross GCC Built-in Compiler Settings
に、 " - std = c ++ 14"を追加します。C++ Build -> Settings -> Cross G++ Compiler -> Miscellaneous
に、 " - std = c ++ 14"を追加します。プロジェクトのインデックスを再作成して、最終的にEclipseを再起動してください。期待通りに動作するはずです。
ハックもクリーン版もIndigoでは動作しません。ハックは無視され、必要な設定オプションがありません。明白な理由もなく、buildは機能しなくなった後で機能し始め、有用な理由も提供されません。少なくともコマンドラインから、再現可能な結果が得られます。
私はstd :: optionalとstd :: swapを使ったCとC++が混在するプロジェクトでEclipse C++ 2019-03を使っても同じような問題がありました。私のために働いたのはこれでした。 「プロパティー」 - >「C/C++ビルド」 - >「設定」 - >「ツール設定」 - >「Cross G ++ Compiler」で、Miscellaneousから-std = gnu ++ 17を削除し、代わりにDialect-> Other Dialect Flagsに入れます。
私はこれをMac上で解決しました。 Homebrewを使って最新バージョンのgcc/g ++をインストールしました。それらは/ usr/local/binにインクルードして/ usr/local/binに着陸します。
私は/ usr/local/binにCDを入れて、g ++ @ 7からシンボリックリンクを作成しました。
それから、MyProject - >プロパティ - > C/C++ビルド - >設定 - > GCC C++コンパイラに行き、コマンドを "g ++"から "/ usr/local/bin/g ++"に変更しました。シンボリックリンクを作成しないことにした場合は、より具体的にすることができます。
リンカーについても同じことをしてください。
適用して適用して閉じる。インデックスを再構築しましょう。しばらくの間、それは厄介な数のエラーを示しました、しかし、私はそれがインデックスを構築している間であったと思います。私がエラーを考え出していた間に、それらはすべてそれ以上のアクションなしで消えました。
私はEclipse - > Properties - > C/C++ - > Core Build Toolchainsに行き、それらを異なるパスで編集することもできることを確認せずに考えますが、それが何をするかわからないです。