2012-03-07 7 views
0

私はJavaとCの新バージョンです。私の本は私的な関数については言及しておらず、Googleの検索はそれほど大きくはなりません。これは私にとっては些細なはずですが、私はそれを働かせることはできません。C++のプライベート関数 - このスコープ内のエラーではありません

私はこのコードを持っている:

#ifndef RUNDATABASE_H 
#define RUNDATABASE_H 
#include <iostream> 
#include <string> 

class RunDatabase 
{ 
    public: 
     int main(); 
    protected: 
    private: 
     bool checkIfProperID(std::string); 
}; 

#endif // RUNDATABASE_H 

、別のファイルに:

#include "RunDatabase.h" 

int main() 
{ 

    std::string id; // after this, I initialize id 

    if(!checkIfProperID(id)) 
    { 
     std::cout << "Improperly formatted student ID, must be numeric" << std::endl; 
     break; 
    } 

} 

bool RunDatabase::checkIfProperID(std::string id) 
{ 
    return true; 
} 

私はこのエラーを取得する:error: 'checkIfProperID' was not declared in this scope

のWindows 7 64ビット上のMinGWグラム++ 4.4.1を使用します。

ありがとうございました。

+2

Javaから来た場合はこれを知ってはいけませんか?ごめんなさい。とにかく、答えはかなり明確になります。 – Marlon

+0

@MarlonメインはcheckIfProperIdと同じクラスなので、なぜ他の関数がスコープに含まれていないのかわかりません。 Javaからmainから同じことをすることはできますが、メソッドは静的でなければならないか、同じクラスの新しいオブジェクトをインスタンス化する必要があります。 – jn1kk

+0

あなたの本が私的な機能について言及していないなら、あなたは本当にそれを落とし[その名前にふさわしい本を得る]べきです(http://stackoverflow.com/q/388242/46642)。 –

答えて

1

checkIfProperIDは、RunDatabaseの方法です。つまり、checkIfProperIDを呼び出すにはRunDatabaseオブジェクトが必要です。

RunDatabase rd; 
rd.checkIfProperID(id); 

I don't see why the other function is not in the scope.

ここでの "スコープは" クラスです。

RunDatabase::checkIfProperID 

::に注目してください。これは、メソッドがクラスに属し、グローバルスコープではないことを意味します。

+0

したがって、main関数はクラスの一部ではありませんか? – jn1kk

+1

@skynorth No.CおよびC++のエントリポイント 'main'はグローバルスコープ内で宣言されています。あなたは 'RunDatabase :: main'がエントリーポイントであると誤解しています。 'RunDatabase :: main'は' main'と同じではありません。 – Marlon

+0

私はTomasz Muldnerの "C++ Programming With Design Patterns"の本からC++を学んでいますが、これは言及されていません。ありがとう! mainはJavaのクラスの一部であるので、どのように私が混乱していたかを見ることができます。答えは1秒で受け入れます。 – jn1kk

1

Javaとは異なり、C++では自立型の関数を使用できます。プログラムを実行するときに呼び出されるmain関数は、mainというメンバーではなく、フリーであるmainです。次のようにあなたのcppのファイルを変更した場合、物事はコンパイルする必要があります

int main() { 
    RunDatabase rdb; 
    rdb.main(); 
} 

RunDatabase::main() { 
    // the code of the main function from your post 
} 
+0

申し訳ありませんが、誰かがすでに私に答えをくれてからあなたの答えを受け入れることはできません。しかしこれは私が使うものです。 +1 – jn1kk

1

問題はmainRunDatabaseのメンバーとして実装されていないということです。

int main() 
{ 

int RunDatabase::main() 
{ 

する必要があります次に、あなたのプログラムがで実行を開始しますmain()機能を、必要になります。

も開始し、main関数の後にあなたのクラスのメンバ関数の名前を付けないよう考慮します混乱を避けるために実行する。例:

class RunDatabase 
{ 
public: 
    int execute(); 
protected: 
private: 
    bool checkIfProperID(std::string); 
}; 

int RunDatabase::execute() 
{ 

    std::string id; // after this, I initialize id 

    if(!checkIfProperID(id)) 
    { 
     std::cout << "Improperly formatted student ID, must be numeric" << std::endl; 
     break; 
    } 

} 

/// runs when the program starts 
int main() 
{ 
    RunDatabase runDatabase; 
    runDatabase.execute(); 
} 
関連する問題