没有对象不能调用成员函数

Posted

技术标签:

【中文标题】没有对象不能调用成员函数【英文标题】:cannot call member function without object 【发布时间】:2009-07-14 20:15:34 【问题描述】:

这个程序有用户输入 name/age 对,然后使用类输出它们。 这是代码。

#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 的东西。我应该如何解决这个问题?

【问题讨论】:

我想知道你为什么想要两个矢量数据属性(姓名、年龄)?一个实例是否会用于一对以上? 要考虑的另一件事...为什么单独的 std::vector 名称和年龄而不是单个 std::vector? 请指定哪一行产生错误(例如带有注释) 【参考方案1】:

您需要实例化一个对象才能调用其成员函数。成员函数需要一个对象来操作;它们不能单独使用。例如,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();

【讨论】:

【参考方案2】:

如果你想这样称呼它们,你应该将它们声明为静态的。

【讨论】:

在这种情况下不可能,因为所有方法都需要对象上下文来访问成员属性名称、年龄、名称、年龄中的一个或多个。 (它们也可以是静态的。但那将毫无用处;-)) 谢谢。对我的情况是正确的。忘了放“静态”关键字【参考方案3】:

只需在函数返回类型的开头添加 static 关键字.. 然后你可以在没有对象的情况下访问类的成员函数:) 例如:

static void Name_pairs::read_names()

   cout << "Enter name: ";
   cin >> name;
   names.push_back(name);
   cout << endl;

【讨论】:

【参考方案4】:

您是对的 - 您声明了一个新的使用定义类型 (Name_pairs),并且您需要该类型的变量才能使用它。

代码应该是这样的:

Name_pairs np;
np.read_names()

【讨论】:

以上是关于没有对象不能调用成员函数的主要内容,如果未能解决你的问题,请参考以下文章

static成员函数不能调用non-static成员函数

成员函数

C++中的派生类,可以不定义对象直接调用基类的成员和调用自己的成员函数嘛???

const对象 不能调用非const修饰的成员函数

有没有办法使成员函数不能从构造函数调用?

c++,类的对象作为形参时一定会调用复制构造函数吗?