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

using namespace std; 

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

void MyClass::printInformation() 
{ 
    return; 
} 

int main() 
{ 

    MyClass::printInformation(); 

    fgetc(stdin); 
    return(0); 
} 

Wie würde ich rufen Sie die printInformation Funktion innerhalb main? Der Fehler sagt mir, dass ich ein Klassenobjekt dazu verwenden muss.Aufruf Elementfunktionen innerhalb Haupt C++

Antwort

20

Deklarieren Sie eine Instanz von MyClass, und rufen Sie dann die Member-Funktion auf diese Instanz:

MyClass m; 

m.printInformation(); 
16

Wenn Sie Ihren Code arbeiten, wie oben vornehmen wollen, die Funktion printInformation() muss als erklärt und umgesetzt werden eine statische Funktion.

Wenn auf der anderen Seite Informationen über ein bestimmtes Objekt gedruckt werden sollen, müssen Sie zuerst das Objekt erstellen.

3

Sie müssen ein Objekt erstellen, da printInformation() nicht statisch ist. Versuchen:

int main() { 

MyClass o; 
o.printInformation(); 

fgetc(stdin); 
return(0); 

} 
2

erklären es „statisch“ wie folgt aus:

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

Aus Ihrer Frage ist es unklar, ob Sie die Klasse ohne Identität oder wenn Aufruf der Methode in der Lage verwenden möchten, erfordert, dass Sie Erstellen Sie eine Instanz der Klasse. Dies hängt davon ab, ob das printInformation-Mitglied allgemeine Informationen oder genauere Informationen zur Objektidentität schreiben soll.

Fall 1: Sie möchten die Klasse verwenden, ohne eine Instanz zu erstellen. Die Mitglieder dieser Klasse sollten static sein. Mit diesem Schlüsselwort teilen Sie dem Compiler mit, dass Sie die Methode aufrufen möchten, ohne eine neue Instanz der Klasse erstellen zu müssen.

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

Fall 2: Sie wollen die Klasse eine Instanz zu haben, müssen Sie zuerst so ein Objekt erstellen, dass die Klasse eine Identität hat, einmal, dass Sie das Objekt verwenden können, erfolgt sein Methoden.

Myclass m; 
m.printInformation(); 

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

Wenn Sie nicht wissen, wann Zeiger zu verwenden, lesen Sie Pukku Zusammenfassung in diesem Stack Overflow question.
Bitte beachten Sie, dass Sie im aktuellen Fall keinen Zeiger benötigen. :-)

0

Sie die Methode eine Instanz der Klasse erstellen müssen für den Aufruf ..

0

auf informelle Note, können Sie auch nicht-statische Member-Funktionen auf Provisorien nennen:

MyClass().printInformation(); 

(In einer anderen informellen Notiz, das Ende der Lebensdauer der temporären Variablen (Variable ist wichtig, weil Sie auch nicht-const Elementfunktionen aufrufen können) kommt am Ende des vollständigen Ausdrucks (";"))

Verwandte Themen