2009-07-14 76 views
24

該程序有用戶輸入name/age對,然後使用類輸出它們。 這是代碼。無法通過對象調用成員函數

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

然而,當int main()我想調用的函數,我得到"cannot call 'whatever name is' function without object."我猜這是因爲它是尋找類似variable.testvariable.read_names。我應該如何解決這個問題?

回答

29

您需要實例化一個對象才能調用其成員函數。成員函數需要一個對象來操作;他們不能單獨使用。該main()功能可能,例如,是這樣的:

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

不可能在這種情況下,因爲所有的方法都需要對象上下文來訪問成員屬性姓名,年齡,姓名,年齡的一個或多個。 (它們也可能是靜態的,但是這樣會變得毫無用處;-)) – VolkerK 2009-07-14 20:28:17

1

你是對的 - 你聲明瞭一個新的使用定義類型(Name_pairs),並且你需要該類型的變量來使用它。

的代碼應該是這樣的:

Name_pairs NP;

np.read_names()

相關問題