2009-07-14 28 views
24

Bu program, kullanıcı girdisine name/age çiftleri girer ve bunları bir sınıf kullanarak çıkarır. İşte kod. Ben işlevleri çağırmak çalışıyorum zaman int main() yılında, nesne olmadan üye işlevini çağırabilir

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

Ancak, ben bunu variable.test veya variable.read_names gibi bir şey arıyor çünkü tahmin ediyorum "cannot call 'whatever name is' function without object." olsun. Bunu düzeltmek için nasıl gitmeliyim?

cevap

29

Üye işlevlerini çağırmak için bir nesneyi başlatmanız gerekir. Üyenin işlevleri üzerinde çalışacak bir nesneye ihtiyaç duyar; Sadece kendi başlarına kullanamazlar. main() fonksiyonu, örneğin, bu gibi görünebilir: Eğer onları böyle aramak isterseniz, bunları statik ilan etmeli

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

.

+0

Mümkün değil tüm yöntemler üye özellikleri isimleri, yaşları, isim, yaş birini veya birkaçını erişmek için nesne bağlamı gerek beri. (onlar da statik olabilirlerdi. Ama sonra çok işe yaramaz ;-)) – VolkerK

+0

teşekkür ederim. davam için düzelt. 'static' anahtar kelimesini koymayı unuttum – jondinham

1

Haklısınız - yeni bir kullanım tanımlı tür (Name_pairs) ilan ettiniz ve kullanmak için bu türden bir değişkene ihtiyacınız var.

kodu şöyle gitmeli:

Name_pairs np; Bu durumda

np.read_names()

İlgili konular