簡體   English   中英

不能調用沒有 object 的成員 function

[英]cannot call member function without object

該程序具有用戶輸入的name / age對,然后使用 class 輸出它們。 這是代碼。

#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的東西。 我應該如何解決這個問題?

您需要實例化一個對象才能調用其成員函數。 成員函數需要一個對象來操作; 它們不能單獨使用。 例如, 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();
}

如果你想這樣調用它們,你應該聲明它們是靜態的。

只需在函數返回類型的開頭添加static關鍵字..然后您就可以訪問沒有對象的類的成員函數:)例如:

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

您是對的 - 您聲明了一個新的使用定義類型(Name_pairs),並且您需要該類型的變量才能使用它。

代碼應該是這樣的:

Name_pairs np;
np.read_names()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM