2009-07-14 53 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()

相关问题