2009-07-14 11 views
24

Ten program ma pary użytkowników name/age par, a następnie wyprowadza je, używając klasy. Oto kod.nie można wywołać funkcji członka bez obiektu

#include "std_lib_facilities.h" 

class Name_pairs 
{ 
public: 
     bool test(); 
     void read_names(); 
     void read_ages(); 
     void print(); 
private: 
     vector<string>names; 
     vector<double>ages; 
     string name; 
     double age; 
}; 

void Name_pairs::read_names() 
{ 
    cout << "Enter name: "; 
    cin >> name; 
    names.push_back(name); 
    cout << endl; 
} 

void Name_pairs::read_ages() 
{ 
    cout << "Enter corresponding age: "; 
    cin >> age; 
    ages.push_back(age); 
    cout << endl; 
} 

void Name_pairs::print() 
{ 
    for(int i = 0; i < names.size() && i < ages.size(); ++i) 
      cout << names[i] << " , " << ages[i] << endl; 
} 

bool Name_pairs::test() 
{ 
    int i = 0; 
    if(ages[i] == 0 || names[i] == "0") return false; 
    else{ 
     ++i; 
     return true;} 
} 


int main() 
{ 
    cout << "Enter names and ages. Use 0 to cancel.\n"; 
    while(Name_pairs::test()) 
    { 
    Name_pairs::read_names(); 
    Name_pairs::read_ages(); 
    } 
    Name_pairs::print(); 
    keep_window_open(); 
} 

Jednak w int main() gdy próbuję wywołać funkcje uzyskać "cannot call 'whatever name is' function without object." Zgaduję, to dlatego, że patrzy na coś takiego variable.test lub variable.read_names. Jak mam to naprawić?

Odpowiedz

29

Należy utworzyć instancję obiektu w celu wywołania jego funkcji składowych. Funkcje członkowskie potrzebują obiektu do działania; nie można ich po prostu używać samodzielnie. Funkcja main() może na przykład wyglądać tak:

int main() 
{ 
    Name_pairs np; 
    cout << "Enter names and ages. Use 0 to cancel.\n"; 
    while(np.test()) 
    { 
     np.read_names(); 
     np.read_ages(); 
    } 
    np.print(); 
    keep_window_open(); 
} 
17

Jeśli chcesz, aby połączyć je tak, należy je zadeklarować statyczne.

+0

nie jest możliwe w tym przypadku, ponieważ wszystkie metody trzeba kontekst obiektu, aby uzyskać dostęp do jednej lub więcej z jej właściwościami nazwy, wiek, imię i nazwisko, wiek. (mogą też być statyczne, ale wtedy byłoby to zupełnie bezużyteczne ;-)) – VolkerK

+0

dziękuję. poprawne dla mojej sprawy. zapomniałem wstawić słowo kluczowe "statyczne" – jondinham

1

Masz rację - zadeklarowałeś nowy typ zdefiniowany do użycia (Name_pairs) i potrzebujesz zmiennej tego typu, aby z niej skorzystać.

Kod powinien wyglądać tak:

Name_pairs NP;

np.read_names()

Powiązane problemy