This program has the user input name/age pairs and then outputs them, using a class. Here is the code.
#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(); } However, in int main() when I'm trying to call the functions I get "cannot call 'whatever name is' function without object." I'm guessing this is because it's looking for something like variable.test or variable.read_names. How should I go about fixing this?
4 Answers
You need to instantiate an object in order to call its member functions. The member functions need an object to operate on; they can't just be used on their own. The main() function could, for example, look like this:
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(); } 0If you want to call them like that, you should declare them static.
2just add static keyword at the starting of the function return type.. and then you can access the member function of the class without object:) for ex:
static void Name_pairs::read_names() { cout << "Enter name: "; cin >> name; names.push_back(name); cout << endl; } You are right - you declared a new use defined type (Name_pairs) and you need variable of that type to use it.
The code should go like this:
Name_pairs np; np.read_names()