cannot call member function without object

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?

3

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

If you want to call them like that, you should declare them static.

2

just 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() 

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

You Might Also Like