C++ 无法在没有对象的情况下调用成员函数

C++ 无法在没有对象的情况下调用成员函数,c++,C++,此程序具有用户输入的名称/年龄对,然后使用类输出它们。 这是代码 #include "std_lib_facilities.h" class Name_pairs { public: bool test(); void read_names(); void read_ages(); void print(); private: vector<string>names; vector<dou

此程序具有用户输入的
名称
/
年龄
对,然后使用类输出它们。 这是代码

#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();
}
#包括“std_lib_facilities.h”
类名\u对
{
公众:
布尔检验();
无效读取名称();
无效读取日期();
作废打印();
私人:
矢量名称;
矢量;
字符串名;
双倍年龄;
};
void Name_pairs::read_names()
{
姓名;
名称。推回(名称);
年龄;
年龄。推回(年龄);

cout您需要实例化一个对象才能调用其成员函数。成员函数需要一个对象来操作;它们不能单独使用。例如,
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();
}
Name_pairs np;
np.read_names()
intmain()
{
名称_对np;

cout如果您想这样调用它们,您应该将它们声明为静态。

您是对的-您声明了一个新的使用定义类型(Name\u pairs),您需要该类型的变量才能使用它

代码应该是这样的:

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();
}
Name_pairs np;
np.read_names()

只需在函数返回类型的开头添加static关键字。。 然后您可以访问该类的成员函数,而无需对象:) 例如:

static void Name\u pairs::read\u names()
{
姓名;
名称。推回(名称);

在这种情况下不可能,因为所有方法都需要对象上下文来访问一个或多个成员属性名称、年龄、名称、年龄。(它们也可以是静态的。但这样做将非常无用;-))谢谢。我的情况正确。忘了放“static”关键字我想知道为什么您需要两个向量数据属性(名称、年龄)一个实例将被用于多于一对吗?另一个要考虑的事情…为什么单独的STD::名称和年龄的向量而不是单个的STD::vector < NAMEX对> >请指定哪一行产生错误(以注释为例)