web-dev-qa-db-ja.com

Eclipse C / C ++はエラーを表示しますが、コンパイルしますか?

Your Second Arduino Project で説明されているように、EclipseでいくつかのArduinoコードをビルドしていますが、SerialなどのArduinoライブラリを使用するたびに、Eclipseは関数名に下線を引き、それらは解決できません。ただし、コードは実際にコンパイルされるため、Eclipseが関数が欠落していると考える理由については少し戸惑っています。この問題を解決する方法について誰かが何か考えを持っているなら、それはありがたいです。よろしくお願いします。

編集:私はもっと具体的だったはずですが、EclipseはArduinoライブラリ内のメソッドに下線を引きます。したがって、Serial.println("hello");を使用すると、println()に下線が引かれ、解決できないと主張します。その後、正常にコンパイルされ、arduinoボードにアップロードされたときにメソッドが機能します。

EDIT2:エラーが見つかりました。CファイルでいくつかのC++関数を使用しようとしていたのですが、Eclipseはそれを気に入らなかったのです。名前を.cppに変更すると、すべての赤が消えました;)ご協力いただきありがとうございます。

23
SuperTron

手始めに、下線は何色ですか?黄色は警告であることを意味し、赤はエラーであることを意味するため、これは違いを生みます(重大、ほとんどの状況では構築されません)。

次に、「問題」タブを見て、実際のエラーがあるかどうかを確認する必要があります。そこに何もない場合、それは確かに正しくコンパイルされました。

さて、元の質問に戻りましょう。構築しているプロジェクトのタイプによっては、このタイプの動作はそれほど珍しいことではありません。 Eclipseは、特定のプロジェクトのインデックス作成をうまく行っていないようです。コマンドラインから「makeall」を実行すると(これは事実上、ビルド中にEclipseが実行することです)、すべてのコードが解決され、問題なくビルドされる可能性があります。

ただし、Eclipseはすべてのソースコードにインデックスを付け、変数/関数の定義と宣言を解決するために別の別のツールを使用します。これは文字通り、右手が何をしているのかわからない左手の場合です。

7
Cloud

Eclipseは、構成に応じて、ビルドセットアップからインデックスへのパスをプルする場合としない場合があります。ほとんどの場合、そうではありません...ビルドのセットアップは問題なく、おそらく手動でビルドできるため、正しくビルドされています。

CDTインデクサー(コードの下線、F3宣言のジャンプなどがどこから来るのかを判断するためのエンジン)は、多くの場合、Makefileを解析してどこを見ればよいかを知るのに十分スマートではありません。ヘッダーとソース用。その情報を手動でEclipseに伝える必要があります。

プロジェクトプロパティ-> C/C++一般->パスとシンボルに移動します。

これに投入する必要のある作業量は、環境によって大きく異なります。この外部ライブラリだけが頭痛の種である場合は、おそらくそのライブラリのパスを追加してインデックスを再作成する必要があります。

プロジェクトを右クリックしてIndex->​​ Rebuildを選択します

38
dolphy

以下の解決策は私のために働きました:右クリックを使用してプロジェクトをクリックします。次に:プロパティ-> C/C++一般->パスとシンボル->シンボル-> GNU C++。この問題が発生した場合、ほぼ確実にシンボルはまったくありません。値「201402L」のシンボル「__cplusplus」を追加します。この後:を右クリックします。プロジェクト->インデックス->再構築これで完了です。

6
Zormex

シンボルを解決するとき、CDTインデクサーは、コンパイルユニットに実際に含まれているヘッダーファイルに関係なく、すべてのヘッダーファイルを考慮するようです。 Eclipse Bugzillaに提出された対応するバグレポートがあります: https://bugs.Eclipse.org/bugs/show_bug.cgi?id=43955

1
Compfy

私はフォルダを含めていました

プロジェクトのプロパティ-> C/C++一般->パスとシンボル->インクルード

それらを削除すると、赤い下線が消えました。つまり、ビルドとIDE同期している場所です。

1
robor78

EclipseはJavaの場合ほどC++では機能しませんが、メニューバーの[再構築]を押すと問題について警告するはずです。

それを試して、問題が解決するかどうかを確認してください。

0
E. Nusinovich

私も同じ問題を抱えていました。 インデックス->再構築は役に立ちませんでした。 main.cppに行#include <avr/iom1280.h>を追加し、Index->​​ Rebuildに下線を付けたところ、下線が消えました。次に、行#include <avr/iom1280.h>を削除し、まだインダーラインなしで投影しました。

iom1280.hをコントローラーの名前に置き換えます。 "avr\include\avr \"フォルダーで使用可能な名前を確認してください

0
Petro Shm