2009-03-25 8 views
6
#include <iostream> 

using namespace std; 

class MyClass 
{ 
public: 
     void printInformation(); 
}; 

void MyClass::printInformation() 
{ 
    return; 
} 

int main() 
{ 

    MyClass::printInformation(); 

    fgetc(stdin); 
    return(0); 
} 

mainの関数はどのようにして呼び出されますか? このエラーは、クラスオブジェクトを使用する必要があることを示しています。メインC++内のメンバー関数の呼び出し

答えて

20

のMyClassのインスタンスを宣言し、そのインスタンス上のメンバ関数を呼び出します。

MyClass m; 

m.printInformation(); 
16

あなたのコードの作業は、上記のようにしたい場合は、関数printInformationは()として宣言して実装する必要があります静的関数です。

一方、特定のオブジェクトに関する情報を印刷する場合は、まずオブジェクトを作成する必要があります。

3

printInformation()は静的ではないため、オブジェクトを作成する必要があります。試してみてください:

int main() { 

MyClass o; 
o.printInformation(); 

fgetc(stdin); 
return(0); 

} 
2

それはこのように「静的」宣言:あなたの質問から

static void MyClass::printInformation() { return; } 
11

を使用すると、アイデンティティなした場合、またはクラスができ、使用になりたい場合は、それは不明であるメソッドを呼び出すとする必要がありますクラスのインスタンスを作成します。これは、printInformationメンバにいくつかの一般的な情報を記述させるか、オブジェクトのアイデンティティーについてより具体的にするかによって異なります。

ケース1:あなたは、インスタンスを作成せずにクラスを使用します。そのクラスのメンバはstaticである必要があります。このキーワードを使用すると、クラスの新しいインスタンスを作成せずにメソッドを呼び出せることをコンパイラに指示します。

class MyClass 
{ 
public: 
    static void printInformation(); 
}; 

ケース2:あなたが最初のクラスは、アイデンティティを持つようにそれが行われた後、あなたがオブジェクト彼を使用することができ、オブジェクトを作成する必要があり、クラスはインスタンスを持つようにしたいですメソッド。

Myclass m; m.printInformation(); // Or, in the case that you want to use pointers: Myclass * m = new Myclass(); m->printInformation(); 

あなたはポインタを使用する際にわからない場合

は、このStack Overflow questionにPukkuの概要をお読みください。
現在のケースではポインタは必要ありません。あなたがメソッドを呼び出すためのクラスのインスタンスを作成する必要があります:-)

0

..

0

非公式ノートで、あなたはまた、一時の非静的メンバ関数を呼び出すことができます。

MyClass().printInformation(); 

(別の非公式ノートでは、非constメンバ関数を呼び出すこともできるので、変数が重要です)は、完全式( ";")の末尾にあります。

関連する問題