kan lidfunctie niet aanroepen zonder object

Dit programma laat de gebruiker name/age-paren invoeren en voert ze vervolgens uit met behulp van een klasse.
Hier is de 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();
}

Echter, in int main()wanneer ik de functies probeer aan te roepen krijg ik "cannot call 'whatever name is' function without object."I’ Ik vermoed dat dit komt omdat het zoekt naar iets als variable.testof variable.read_names. Hoe moet ik dit oplossen?


Antwoord 1, autoriteit 100%

U moet een object instantiëren om zijn lidfuncties aan te roepen. De lidfuncties hebben een object nodig om op te werken; ze kunnen niet alleen op zichzelf worden gebruikt. De functie main()kan er bijvoorbeeld als volgt uitzien:

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

Antwoord 2, autoriteit 69%

Als je ze zo wilt noemen, moet je ze statisch verklaren.


Antwoord 3, autoriteit 11%

voeg gewoon statischtrefwoord toe aan het begin van het functieretourtype..
en dan heb je toegang tot de lidfunctie van de klasse zonder object 🙂
bijvoorbeeld:

static void Name_pairs::read_names()
{
   cout << "Enter name: ";
   cin >> name;
   names.push_back(name);
   cout << endl;
}

Antwoord 4, autoriteit 4%

Je hebt gelijk – je hebt een nieuw door gebruik gedefinieerd type (Name_pairs) gedeclareerd en je hebt een variabele van dat type nodig om het te gebruiken.

De code zou als volgt moeten gaan:

Name_pairs np;
np.read_names()

Other episodes