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); 
} 

Jak można nazwać funkcję printInformation w obrębie main? Błąd mówi mi, że muszę użyć obiektu klasy, aby to zrobić.Wywołanie funkcji członka w obrębie głównego C++

Odpowiedz

20

stwierdzenie wystąpienia MojaKlasa, a następnie wywołać funkcję członka na tej instancji:

MyClass m; 

m.printInformation(); 
16

Jeśli chcesz uczynić swoją pracę kodu jak powyżej, printInformation function() musi być zadeklarowany i zaimplementowany jako funkcja statyczna.

Jeśli, z drugiej strony, ma wydrukować informacje o określonym obiekcie, najpierw trzeba utworzyć obiekt.

3

Musisz utworzyć obiekt, ponieważ printInformation() jest nie statyczny. Spróbuj:

int main() { 

MyClass o; 
o.printInformation(); 

fgetc(stdin); 
return(0); 

} 
2

uznaniu jej za „statyczne” tak:

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

od Twoje pytanie nie jest jasne, czy chcesz, aby móc używać klasy bez tożsamości lub jeśli wywołanie metody wymaga utwórz instancję klasy. To zależy od tego, czy chcesz, aby użytkownik printInformation zapisał pewne ogólne informacje lub bardziej szczegółowe informacje na temat tożsamości obiektu.

Przypadek 1: Chcesz użyć klasy bez tworzenia instancji. Członkowie tej klasy powinni być static, używając tego słowa kluczowego, mówisz kompilatorowi, że chcesz wywołać metodę bez konieczności tworzenia nowej instancji klasy.

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

Przypadek 2: Chcesz klasę mieć wystąpienie, trzeba najpierw utworzyć obiekt tak, że klasa ma swoją tożsamość, gdy to zrobisz możesz użyć obiektu jego metody.

Myclass m; 
m.printInformation(); 

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

Jeśli nie wiedzieć kiedy użyć wskazówki, przeczytaj podsumowanie Pukku w tym Stack Overflow question.
Należy pamiętać, że w tym przypadku nie potrzebujesz wskaźnika. :-)

0

trzeba utworzyć instancję klasy do wywołania metody ..

0

Na nieformalnym notatki, można również zadzwonić niestatyczny funkcji składowych na tymczasowych:

MyClass().printInformation(); 

(w innej nieformalnej notatce koniec okresu ważności zmiennej tymczasowej (zmienna jest ważny, ponieważ można również wywoływać funkcje nie będące elementami const) pojawia się na końcu pełnego wyrażenia (";"))

Powiązane problemy