web-dev-qa-db-ja.com

Eclipse CDT:シンボル「cout」を解決できませんでした

エラーは上記のとおりです。 Eclipseプロジェクトに必要なすべてのファイルを含める必要があります。

/usr/include/c++/4.6
/usr/include
/usr/include/linux
/usr/local/include

等.

std::coutusing namespace std;coutを試しましたが、それでも未解決と表示されます。

iostreamcstdlibをインポートしました。

また、Eclipse 3.7.2を搭載したUbuntu 12.04を使用しています。

コードスニペット:

#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include "XPLMDisplay.h"
#include "XPLMGraphics.h"

int XPluginStart(char * outName,  char * outSig,  char * outDesc) {
    /* ... */
    std::cout << "test" << std::endl;
    /* ... */
}

名前空間stdを使用します。


更新:既存のコードからEclipseプロジェクトを作成しました。新しいC++プロジェクトを作成すると修正されます。既存のプロジェクトのどの設定がこれを引き起こす可能性があるかを説明する回答を受け入れます(したがって、すべてのプロジェクトをカットアンドペーストする必要はありません)。

59
Jeff

ほとんどの場合、システム固有のインクルードディレクトリが設定にないため、インデクサーがiostreamを正しく解析できないため、エラーが発生します。プロジェクトのコンテキストメニューでIndex -> Search For Unresolved Includesを選択すると、/usr/includeで検索し、プロジェクトプロパティのC++ Include Paths and Symbolsに含まれるディレクトリを追加できる未解決のインクルードのリストが表示されます。

私のシステムでは、/usr/include/c++/4.6/x86_64-linux-gnuを解決するためにbits/c++config.hといくつかのディレクトリを追加する必要がありました。

インクルードディレクトリを追加した後、インデックスを再構築することを忘れないでください(インデックス->再構築)。

92
vitaut

不要なシンボル警告を取り除くには、まず、Eclipse CDTが最初に不明なシンボル警告を通常どのように生成するかを理解する必要があります。これはそのプロセスです、多かれ少なかれ:

  1. Eclipseは、システムで利用可能なGCCツールチェーンを検出します
  2. Eclipseプロジェクトは、特定のツールチェーンを使用するように構成されています
  3. Eclipseはツールチェーンでディスカバリーを行い、そのインクルードパスと組み込みの定義を見つけます。つまり、関連するオプションを使用して実行し、出力を読み取ります。
  4. Eclipseは、インクルードパスからヘッダーファイルを読み取ります
  5. Eclipseはプロジェクトのソースコードにインデックスを付けます
  6. Eclipseは、エディターで未解決のシンボルに関する警告を表示します

長期的には、インクルードディレクトリ、シンボルなどを手動で追加して結果をオーバーライドするよりも、以前のステップの問題を修正する方がよい場合があります。

ツールチェーン

GCCがインストールされていて、Eclipseがそれを検出した場合、新しいC++プロジェクトが使用できるツールチェーンの選択肢としてGCCをリストする必要があります。これは、右側のWindow -> Preferences -> C/C++ -> New CDT Project WizardタブのToolchainsボックスのPreferred Toolchainsにも表示されます。表示されない場合は、 特別な環境を必要とするコンパイラーに関するCDT FAQの回答 (および MinGW および Cygwin のWindowsユーザー向けの回答を参照してください。 )

既存のEclipse C++プロジェクトがある場合、プロジェクトプロパティを開き、C/C++ Build -> Tool Chain Editorに移動して、Current toolchain:プルダウンから必要なツールチェーンを選択することにより、関連するツールチェーンを変更できます。 (目的のツールチェーンがプロジェクトで以前に設定されたものと十分に異なる場合は、最初にDisplay compatible toolchains onlyボックスをオフにする必要があります。)

Eclipseの起動後にシステムにツールチェーンを追加した場合、ツールチェーンを検出するためにツールチェーンを再起動する必要があります。

ディスカバリー

次に、プロジェクトのC/C++ Build -> Discovery Options -> Discovery profiles scopePer Languageに設定されている場合、次のビルド中に、プロジェクトに関連付けられた新しいツールチェーンがインクルードパスとシンボルの自動検出に使用され、「組み込み」パスとシンボルの更新に使用されますIncludesおよびSymbolsタブのプロジェクトのC/C++ General -> Paths and Symbolsに表示されます。

インデックス作成

ツールチェーンを設定し、ビルドを行って古いシンボルの警告を消した後、再度インデックスを作成する必要がある場合があります。プロジェクトフォルダを右クリックして、Index -> Rebuildに移動します。

(Eclipse 3.7.2/CDT 8でテスト済み)

20
rakslice

最初にここでマークされたソリューションを試しました。うまくいきましたが、やさしくハックがあり、gccを更新するたびにやり直す必要があります。私は最終的に次のことを行うことでより良い解決策を見つけます:

  1. Project-> Properties-> C/C++ General-> Preprocessor Include Paths, Macros, etc.
  2. Providers-> CDT GCC built-in compiler settings
  3. Use global provider shared between projectsのチェックを外します(必要に応じてグローバルプロバイダーを変更することもできます)
  4. Command to get compiler specsで、最後に-std=c++11を追加します
  5. Index-> Rebuild

出来上がり、簡単でシンプル。これがお役に立てば幸いです。

注:私はケプラーにいます。これが以前のEclipseで機能するかどうかはわかりません。

8
Andy Shiue

MinGWおよびgcc 4.8.1を使用するEclipseで* std :: shared_ptr *で同様の問題が発生しました。何があっても、Eclipseは* shared_ptr *を解決しません。これを修正するために、手動で__cplusplusマクロをC++シンボルと-violaに追加しました! -Eclipseはそれを見つけることができます。コンパイルオプションとして-std = c ++ 11を指定したため、Eclipseコードアナライザーもそのオプションを使用すると仮定しました。したがって、これを修正するには:

  1. プロジェクトコンテキスト-> C/C++全般->パスとシンボル->シンボルタブ
  2. [言語]パネルで[C++]を選択します。
  3. シンボル__ cplusplus2011の値で追加します。

これに関する唯一の問題は、gccがシンボルが既に定義されていると文句を言うことです(!)が、コンパイルは以前のように完了することです。

4
codefool

私はUbuntu 12.04/Eclipse 4.2.1/CDT 8.1.1を使用していますが、以前は同じ問題を抱えていました:SVNからC++プロジェクトをインポートすると、これらの迷惑な「未解決の包含」エラーが発生し、代わりに作成する必要があります回避策として新しいプロジェクトを作成し、そこにファイルをコピーします(SVN機能が存在しないため、まだ部分的です!)。

ついに、私は単純で満足のいく解決策を見つけました。

  • Project -> Properties -> C/C++ General -> Preprocessor Include Paths, Macros etc. -> Providersに移動して、Enable language settings providers for this projectを確認します。

  • Eclipseを再起動します。

うまくいけば、それはすでにトリックを行います。

4
user1995696

Buttom:問題リストのすべてのエラーを削除するだけです。その後、プロジェクトを閉じて、プロジェクトを再度開きます

その後、これらの愚かなエラーが発生します。

1
vivi

WindowsをインストールしたCygwinEclipse CDT (Kepler)を使用すると、同じ問題が発生しました。私が考えることができるすべてのCygwinインクルードでプロジェクトプロパティを指定した後、coutを見つけることができませんでした。

最後の行方不明の断片はC:cygwin64\lib\gcc\x86_64-pc-cygwin\4.8.2\install-tool\includeであることが判明しました。

総括する:

  • プロジェクトを右クリック
  • Propertiesを選択します
  • C/C++ General> Paths and Symbols> Includesタブに移動します
  • Add...をクリックします
  • File system...をクリックします
  • Cygwin lib\gcc\x86_64-pc-cygwin\4.8.2\install-tool\includeの場所を参照します
  • OKをクリックします

私のプロジェクトに含まれているものは、それがすべて言われて完了したときのように見えました: enter image description here

1
user1205577

この問題を解決するには、[プロパティ]-> [C/C++-Build]-> [検出オプション]で自動検出を有効にしてください。

1
WaTho

Ubuntu 16.04でcmakeを使用してMakefileプロジェクトを作成しました。

Cmakeが生成したMakefileのEclipseプロジェクトを作成したとき、次のように新しいプロジェクトを作成しました。

[ファイル]-> [新規]-> [既存のコードを含むMakefileプロジェクト]。

それを数回行った後に初めて、「インデクサー設定のツールチェーン」のデフォルト設定がどれもないことに気付きました。私の場合、これをLinux GCCに変更し、すべてのエラーが消えました。

それが役立って、それが合法的な解決策でないかどうか私に知らせてください。

乾杯、

男。

1
Guy Avraham

私の場合のように、他のすべてが失敗した場合は、注釈を無効にします。独自のメイクファイルを使用してc ++ 11プロジェクトを開始しましたが、すべての問題を修正できませんでした。注釈を無効にしても、Eclipseはオートコンプリートの実行を支援できます。最も重要なのは、デバッガーがまだ機能することです!

1
ormurin

あなたたちは間違ったセクションを見ています。最近Windowsに不満を感じた後、Linuxにインストールしたときに違いを実感しましたが、その違いはすぐに明らかになりました。

新しいセットアップでは、既存のソースから作成したプロジェクションにインクルードフォルダーがあります。これを展開して、大量のインクルードを確認できます。ただし、追加することはできません。これにより、これらのファイルがリストされていた場所を探すことになりました。

これらは、[プロジェクトプロパティ]> [C/C++全般]> [プリプロセッサインクルード]> [GNU C++ CDT GCCビルトインコンパイラ設定[共有]の下にリストされています。

これらの設定は、選択したツールチェーンによって設定されます。

1
Bluebaron

ArchLinuxでgccとEclipseを更新した後に、これが起こりました。私にとってそれを解決したのはProject -> C/C++ Index -> Rebuildでした。

0
DBedrenko

自分でたくさんのことを試してみて、もう少しアドバイスを追加しても、うまくいきません。

GCCをインストールし、インクルードへのパスを正しく設定しました。同様にstdエラーがあり、coutで動作するものを得ることができませんでした(そしてSLの何かが疑われます...)

G ++がインストールされていないことに気づくまでしばらく時間がかかりました-gccはg ++ではありませんでした。だからちょうど:

Sudo apt-get install g ++

Eclipseを再起動します。上記のgccとインクルードへのパスに関する詳細は問題ないと仮定しますが、今は大丈夫です...

0
Francky_V

私は少し簡単に理解できました右クリック>実行>構成の実行

チェックボックスシステムライブラリ、継承されたメインを含む

0
Sanjay