web-dev-qa-db-ja.com

Eclipse CDTはセマンティックエラーを表示しますが、コンパイルは問題ありません

Ubuntu 10.04 x86にC/C++ Linux開発者向けにEclipse Indigoをインストールしました。

共通の事前定義マクロ__BASE_FILE__を使用すると、EclipseでSymbol '__BASE_FILE__' could not be resolvedと表示されますが、コンパイルは問題ありません。私はコードで頻繁に使用する必要があり、Eclipseは画面に赤い線とバグアイコンを埋めます:)

どうすれば修正できますか?

29
fasked

これが特定の問題に対処しているかどうかはわかりませんが、セマンティックエラーもありました。彼らは、作業中のプロジェクトを終えた直後に突然出てきました。

とにかく、「インデクサーのビルド構成:アクティブなビルド構成を使用する」を設定して、ワークスペース設定の単一オプションで修正しました

他のオプションは「プロジェクトのインデクサー設定で指定されたビルド構成を使用する」で、これは機能していませんでした。 Eclipseのクラッシュ後に破損した可能性があります。

23
taloft

ウィンドウ->設定-> C/C++->コード分析->構文およびセマンティックエラー:オフ

これは問題の原因を解決しませんが、少なくとも誤ったエラーが表示されるのを防ぎます。

20
WindRider

.metadataフォルダを削除してから、プロジェクトをインポートします。

この方法は大丈夫です!

5
Tanghuihua

最も簡単な解決策は、インデクサーをリセットすることです。

ウィンドウ/設定/ C/C++ /インデクサー。
「インデクサーを有効にする」のチェックを外します->> OK
すべて再構築、多くのエラーが表示される場合があります
「インデクサーを有効にする」をチェック->> OK
すべて再構築

このエラーは、停電によるEclipseの強制終了によって発生する可能性があります。

5
Zazun

プロジェクトのインデックスを再構築する必要があります。

プロジェクトを右クリックして、「インデックス」->「再構築」を選択します。

3
mczraf

更新:プロジェクト->プロパティ-> C/C++全般->パスとシンボルに適切なパスを追加する必要があります。解決しない場合は、プロジェクト->プロパティ-> C/C++全般->コード分析でEclipseコードアナライザー(「エラー」を生成する)を構成できます。問題のあるエラーの説明の下で、[選択]-> [スコープ]-> [除外パターン]をカスタマイズしてみてください。

3
ondrisko

IMOの正しい解決策は、プロジェクトでシンボルを定義->プロパティ-> C/C++全般->パスとシンボル->シンボルタブです。シンボルは常にコンパイラーによって提供されると想定できるため、Eclipseに定義済みと見なすように指示するだけです。

私は最近、Eclipseが未定義のマクロについて不平を言っていて、常に-D<MACRO_NAME>コンパイラオプションを使用して提供する同じ問題を抱えていました。

3
compostus

それはworkspace/.metadataと関係があると思います。セマンティックエラーの問題が報告されましたが、Hello Worldはコンパイルおよび実行されます。私はプロジェクトを削除し、別のプロジェクトを作成しました。同じエラー報告です。 CDTの再インストール、同じこと。ワークスペースを削除し、Eclipseをシャットダウンし、再起動して、新しいhello worldを作成しました。ワークスペースを再度削除し、Eclipseを再びシャットダウンしました。今回は、シャットダウン中にEclipseが見つからないときにワークスペースフォルダーを再作成したことに気付きました。 Eclipseがシャットダウンした状態でワークスペースを削除しました。 Eclipseを再起動し、HWプロジェクトを作成しましたが、エラーが約1秒間表示されてから消えました。プロジェクトを削除し、別のプロジェクトを作成し、エラーがしばらく表示された後、プーフします。実際にワークスペースにプロジェクトがあった場合(私の場合はクリーンインストールでした)、ワークスペース内の.metadataフォルダーを削除するだけで修正できます。

3
sidney_h

私はコンポストスの答えに個人的に同意します。

Eclipseのコードアナライザーにある実際の問題を解決するのは良いことです。

しかし、この手順を試すときは、プロジェクト->プロパティ-> C/C++全般->パスとシンボルでシンボルを定義します

記号タブまたは記号を追加する場所が見つかりません。コードアナライザーがこの定義を見つけることができるように、Eclipseに-DANDROIDまたは#define Android 1のようなマクロを追加します。

私はMac OSX Mountain Lionの下にいます。

1
fluke

別の答えとして追加すると、うまくいけばこれは誰かを助けるでしょう。

〜simple workspace(1 c ++ shared-object(linux's version of DLL、3 c ++ executables、and pydev python project)があります

すべてのコードを新しいマシンにチェックアウトしましたが、正常にビルドされますが、std-cおよびstd-C++コードとインクルードに多数の「セマンティックエラー」がありました。

==> .metadataフォルダ全体を削除すると、これが修正されました。

ワークスペース(すべてのプロジェクトファイル/メイクファイル)に重要な設定が何もなかったので、Eclipseは新しいワークスペースを喜んで作成し、ファイル->インポート->既存のプロジェクトを行うだけでした。

1
mike

Ubuntuの場合は、[ウィンドウ]> [設定]> [検索]ボックスに「Indexer」と入力し、左側の列で[インデクサー]を選択します。 「インデクサーオプション」という見出しの下で、次のオプションにチェックマークを付けます(ファイルのスキップを含むオプションを除くすべて)。

  • プロジェクトに含まれないソースファイルのインデックスファイル
  • 未使用のヘッダーにインデックスを付ける
  • エディターでオープンエンドのインデックスソースとヘッダーファイル
  • インクルードの発見的解決を許可する

「索引付け戦略」という見出しの下で、次の両方のオプションにチェックマークを付けます。

  • インデックスを自動的に更新する
  • すべてのファイル保存の直後にインデックスを更新する

「インデクサーの構成の構築」という見出しの下で、次のオプションを選択します。

  • ユーザーアクティブビルド構成
0
danielbker

同様の問題がありましたが、コンパイルは正常でしたが、Eclipseは別のインクルードファイルから#defineを使用する行でエラーを示しました。 「すべてのヘッダーバリアントにインデックスを付ける」をチェックして修正しました。クラスは#ifndef [〜#〜] filename [〜#〜]インデクサーで複数回処理されたため、2回目は[〜#〜] filename [〜 #〜]が定義されているため、.hファイル内のすべての#definesはプリプロセッサによって「表示」されません。ウィンドウに移動|環境設定| C/C++ |インデクサー。

0
Scott

OPの問題でこれが機能するかどうかはわかりませんが、Eclipse Lunaにセマンティックエラーがあり、このスレッドの指示に従うことでそれらを解決できました: Eclipseは未解決のインクルードを示しますが、コンパイルします

コンパイラはヘッダーを検出しますが、Eclipseは検出しません。

あなたはEclipseを助けて、ヘッダーファイルへのパスを以下に設定することができます:

プロジェクト->プロパティ-> C/C++ Build-> Settings-> Compiler-> Includes

私の状況では、Eclipseはインクルードディレクトリの1つを決定しましたが、その中にサブインクルードディレクトリがあることを決定しませんでした。

0
ams

コードで#pragma onceを使用しました。この構成により、問題が発生しました。

--- fileA.h ---

#pragma once
#define MYMACRO(X) func(X)

--- fileB.h ---

#include "fileA.h"

--- fileB.cpp ---

#include "fileB.h"

MYMACRO(5)  <---- warning here

#pragmaを#ifndef #define HEADER_FILE_H #endifに一度置き換えて、問題を修正しました。

0

これはファイルインデックスの問題です。

解決策-プロジェクトを右クリックして、「インデックス」->「すべてのファイルをフレッシュ」します。

(Eclipse CDT.Oxygenに適用)

0
George Eliozov

問題は次のように発生します:コードに新しい変数名を挿入しますこの例の「newone」:

int a;

foo()
{
  a=17;
  newone=23;
}

ファイルが保存されます(したがって、インデクサーが再インデックス付けされます)。次に、定義を追加しました:

int a, newone;

foo1()
{
  newone=0;
}


foo()
{
  a=17;
  newone=23;
}

インデクサーは、行 "newone = 23;"で引き続きエラーを表示します。ただし、「newone」を含む他のコード行ではそうではありません。

解決策:最初に変数を定義してから使用します。

M.

0
leonix

これを試して:

設定-> c/c ++->インデクサー->すべてのヘッダーバリアントのインデックス作成

このオプションをチェックしてください。

0
user245225