web-dev-qa-db-ja.com

メンバー宣言が見つかりません

私は通常のテキストエディタを使用してC++プロジェクトに取り組んできました。後で、デバッグを容易にするために、すべてのファイルをEclipseにインポートしました。

Eclipseでは奇妙なことが起こります。ヘッダーファイルをインクルードしても「メンバー宣言が見つかりません」と文句を言う。ヘッダーファイルには関数定義があります。

この問題を解決するにはどうすればよいですか?

「メンバー宣言が見つかりません」は、Eclipse静的分析ツール( codan )によって生成されたエラーです。このエラーが発生してもコンパイルが成功した場合、これは誤検知です。このツールの古いバージョンでは、誤検知が発生することが知られています。たとえば、 このバグレポート を参照してください。したがって、EclipseCDTを最新バージョンに更新することをお勧めします。

このエラーを引き起こす可能性のあるもう1つの原因は、Eclipseがコードの一部を正しく解析できない未解決のインクルードです。プロジェクトのコンテキストメニューでIndex -> Search For Unresolved Includesを選択すると、未解決のインクルードのリストが表示されます。修正方法の詳細については、 この回答 を参照してください。

次に例を示します。

class C {
  void f(std::vector<int>&);
};

void C::f(std::vector<int>&) {} // Member declaration not found

上記の例では、<vector>が含まれているが解決されていない場合でも、Eclipse CDTで「メンバー宣言が見つかりません」エラーが発生します(インクルードパスの構成が誤っているため)。

18
vitaut

ビルドは成功しましたが、Eclipseでもこの問題を数回経験しました。プロジェクトメニューでC/C++インデックスを再構築することで、この問題を簡単に解決できます。 :)

7
Srijeyanthan

Eclipseでこの問題が発生しましたが、ターミナルでのビルドは成功しました。だから私はEclipseでC/C++インデックスを再構築するだけです:プロジェクトを右クリック->インデックス->再構築。

2
user7484492

メンバー宣言が見つかりません」は、すでに使用されている名前またはキーワードである名前でクラスを作成した場合にも報告されることに気付きました。

1
Luca Davanzo

CDT9.2.1およびEclipseNeon 4.6.3を使用しても、「メンバー宣言が見つかりません」という問題が報告されます。 Srijeyanthanが回答したように、次のように解決する必要があります:プロジェクト> C/C++インデックス>再構築。

0
natmat

Eclipseでソースファイルとヘッダーファイルを分割するときにもこの問題が発生しました。手動で入力してプロジェクトをビルドする代わりに、Eclipseの「メソッドを実装する」ことでこれを解決しました。メソッドを実装することで「インライン関数」がソースファイルに追加されます。

0
user8787937

このメッセージを作成する.cppファイルにエラーが見つかりました。私はnamespace std {ファイルの前に、閉じた後に作成していた新しい関数を配置しました} for namespace。クロージングの移動}ファイルの終わりまで、定義されたファイルがnamespaceにあるように、エラーメッセージを修正しました。

エラーを作成する例。

#include "MyStrFuncs.h"

**namespace** std {

MyStrFuncs::MyStrFuncs() {
    // TODO Auto-generated constructor stub
}

MyStrFuncs::~MyStrFuncs() {
    // TODO Auto-generated destructor stub
}

}  // This ends the **namespace**

//Additional functions will now generate the member declaration not found error...

int MyStrFuncs::str2i(string strIn) {
    int results;
    istringstream convert(strIn);

    if( !(convert)>>results) results = 0;

    return results;
}
// Fix by moving closing } for namespace to here.  Good luck.
0
Kurt Sanger