2011-03-11 4 views
1

を宣言されていません。エラー:****私Function.hファイルで

class Function{ 
    public: 
    Function(); 
    int help(); 
}; 

私Function.cppファイルで:

#include "Function.h" 
int Function::help() //Error here 
{ 
    using namespace std; 
    cout << "Help"; 
    return 1; 
} 

私MAIN.CPPで

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

int menu(){ 
    Function fc; 
    fc.help(); 
    return 1; 
} 

int main(int args, char**argv){ 
    return menu(); 
} 


エラー: '関数'が宣言されていません
誰も私になぜ教えてもらえますか?ありがとうございました。

は、私はこのようにしようと、問題は解決されていますが、私は本当にいけない理由を理解する:
私は

class Function{ 
    public: 
    int status; 
    Function():status(1){} 
    int help(); 
}; 

代わりに古い

class Function{ 
    public: 
    Function(); 
    int help(); 
}; 
の使用:
Function.hファイルで
+0

'function.h'には他のヘッダファイルがいくつかありますか? – Naveen

+0

いいえ – Xitrum

+3

質問が編集され、問題が解決しました。これにより、それは読みにくくなります。コーディングエラーを残し、独自の答えを書くことを提案する。 – harper

答えて

7

すべてのincludeステートメントには、#がありません。

#include "Function.h" 
^ 

coutを使用しているため、Function.cppに#include <iostream>も必要ですが、他のすべてはうまくいきます。

は、ここで私がコンパイルして実行するようになったFunction.cppです:

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

int Function::help() // No error here 
{ 
    using namespace std; 
    cout << "Help"; 
    return 1; 
} 

Function::Function() 
{ 
} 
+0

ああありがとうございますが、ここに入力できなかったので、#が見つかりませんでした。私のファイルにはそれがありました。 – Xitrum

+0

@user:うーん、私は恋人です。投稿したコードがエラーを再現していますか? Function.cppに他のコードがありますか? – Cameron

+0

いいえ、それはすべて私のコードです – Xitrum

2

あなたの実装(CPPファイル)でそれを含めずFunctionクラスのコンストラクタの宣言を作成しました。

#include "Function.h" 

Function::Function(){ 
    // construction stuff here 
} 

int Function::help() //Error here 
{ 
using namespace std; 
cout << "Help"; 
return 1; 
} 
+0

良い点ですが、エラーの原因になってはいけません(リンク時エラー) – Cameron

+0

@Cameron:You – GWW

+0

ya、私は試しましたが、成功しませんでした – Xitrum

2

最初のFunction.hファイルでは、コンストラクタを宣言しましたが、定義していません。 2番目のFunction.hファイル(動作するもの)では、関数コンストラクターを定義して宣言しています。ヘッダーまたはファイルで定義および宣言するか、ヘッダーファイルで宣言してFunction.cppファイルで定義することができます。例えば

、ヘッダファイルに "Function.h" を宣言:

class Function 
    { 
    Function(); 
    } 

及び "Function.cpp" のここで定義する:

Function::Function(){} 

または代替的には、宣言と定義することですヘッダーファイル "Function.h":

もう1つのバージョンのヘッダーファイルは、行うべき良いことである "メンバ初期化リスト"のメンバ変数 "status"を初期化することです(Effective C++、Scott Meyers、Item 4参照)。これが欲しいと思っています:)

4

私は同様の問題がありました。必要なヘッダーファイルのみを用意してください。私はお互いを含む2つのヘッダーファイルを持っていました、そして、それはこの間違いを吐き出します。

関連する問題