2009-07-14 25 views
24

Questo programma ha l'utente input name/age coppie e quindi le emette, utilizzando una classe. Ecco il codice.impossibile chiamare la funzione membro senza oggetto

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

Tuttavia, in int main() quando sto cercando di chiamare le funzioni ottengo "cannot call 'whatever name is' function without object." Sto indovinando questo è perché è alla ricerca di qualcosa di simile o variable.testvariable.read_names. Come dovrei andare a risolvere questo?

risposta

29

È necessario creare un'istanza di un oggetto per chiamare le sue funzioni membro. Le funzioni membro necessitano di un oggetto su cui operare; non possono essere usati da soli. La funzione main() potrebbe, ad esempio, simile a questa:

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

Se volete chiamarli così, si dovrebbe dichiarare la loro statica.

+0

non è possibile in questo caso dal momento che tutti i metodi devono contesto oggetto di accedere a uno o più dei proprietà dei membri nomi, età, nome, età. (potrebbero essere anche statici, ma poi sarebbe abbastanza inutile ;-)) – VolkerK

+0

grazie. corretto per il mio caso. ho dimenticato di mettere la parola chiave 'statica' – jondinham

1

Hai ragione - hai dichiarato un nuovo tipo definito di utilizzo (Name_pairs) e hai bisogno di una variabile di quel tipo per usarlo.

Il codice dovrebbe andare in questo modo:

Name_pairs np;

np.read_names()

Problemi correlati