2013-07-05 3 views
6
という名前のメンバーがありません

私のメインのクラスオブジェクトを持つクラスから関数にアクセスする際に問題があります。私は、クラスのオブジェクトを作成し、そのオブジェクトを使用してそのクラスの.cppファイル内の関数にアクセスしようとしています。私はエラーが発生し続けており、テストするための最も簡単なプログラムを作成したとしても、エラーは発生します。C++クラスには

メイン:

#include <iostream> 
#include "Attack.h" 

using namespace std; 

int main() 
{ 
    Attack attackObj; 
    attackObj.printShiz(); 
} 

クラスヘッダー

#ifndef ATTACK_H 
#define ATTACK_H 

class Attack 
{ 
    public: 
     Attack(); 
     void printShiz(); 
    protected: 
    private: 
}; 

#endif // ATTACK_H 

クラスの.cpp

#include <iostream> 
#include "Attack.h" 
using namespace std; 

Attack::Attack(){ 

} 

void Attack::printShiz(){ 
    cout << "Test" << endl; 
} 

私はこのエラーをどのように修正すればよいですか?私がメインのオブジェクトを使ってAttackクラスのprintShiz関数にアクセスしようとするたびに、エラーが発生し、このクラス内にこの関数が存在するとは考えられません。

エラー:

error: 'class Attack' has no member named 'printShiz' 
+1

コードは正常です。古いバージョンのヘッダーを使用しようとしている可能性があります。 – chris

+3

"Rebuild All"はすべてを修正することがあります。 – johnchen902

+0

同じエラーが発生しました:/ – Rapture686

答えて

0

あなたがメインで閉じ括弧を含めることを忘れないでくださいましたか?

+0

はい、そこに、私はちょうどポストからそれを残しました。 – Rapture686

-1
#include <iostream> 
#include "Attack.h" 

using namespace std; 

int main() 
{ 
    Attack attackObj; 
    attackObj.printShiz(); 
} 

右ヘッダに

#ifndef ATTACK_H 
#define ATTACK_H 

class Attack { 
    public: 
     Attack(){}; 
     void printShiz(){}; 
    protected: 
    private: }; 

#endif // ATTACK_H 

の関数を定義し、コンパイルしてみてください。コンパイラが重複した定義について文句を言っていない場合は、Class.cppファイルをコンパイルするのを忘れてしまったので、単にそれを実行するだけです(どのツールチェーンを使っていますか?)

+0

私が使用しているツールチェーンはmingw32-g ++です。exe – Rapture686

+0

どうやってコンパイルしていますか?私たちにコマンドラインを表示してください – doctorlove

+1

"Class.cppをコンパイルするのを忘れました"と表示され、コンパイルエラーではなく、未定義の参照リンクエラーが表示される –

10

私も同様の問題がありました。それは、私は古いフォルダから同じ名前の古いヘッダーファイルを含めることが判明しました。古いファイルを削除して、#includeディレクティブを新しいファイルを指すように変更しました。

+0

これは質問に対する正解です。時々起こるヘッダーファイルを別のパスにコピーして変更しますが、プロジェクトのどこかに古いヘッダーが含まれているため、メンバー関数の変更や変数などが表示されず、このような「奇妙な」エラーが発生します。 –

-1

私はこれが1年であることを知っていますが、私は同じ問題でそれを見つけました。私の問題は、私の実装ファイルにコンストラクタがないことでした。私は#endifの後のヘッダファイルの最後にコメントマークがあると思います。

0

あなたは.hに誤字がありますか?私は一度私のメインでメソッドが正しく呼び出されたときにこのエラーに遭遇しましたが、.h/.cppのタイプミス(メソッド名の "g"と "q" )。 "コピー/貼り付けエラー"カテゴリに該当します。

0

質問の回答が見つかりませんでしたので、試してもエラーはありません。このようなとしてコンパイル

I:誤りがない

g++ -c class.cpp

g++ -c main.cpp

g++ -o main class.o main.o

、良い作品。 コンパイルにgccバージョンが使用されています。 gccバージョン4.1.2 20080704(Red Hat 4.1.2-46)