没有对象就无法调用成员函数

时间:2009-07-14 20:15:35

标签: c++

此程序具有用户输入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的内容。我该怎么办呢?

4 个答案:

答案 0 :(得分:36)

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

答案 1 :(得分:26)

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

答案 2 :(得分:2)

你是对的 - 你声明了一个新的使用定义类型(Name_pairs),你需要使用该类型的变量来使用它。

代码应该是这样的:

Name_pairs np;
np.read_names()

答案 3 :(得分:1)

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

text = @"<speak version='1.0' xmlns='https://www.w3.org/2001/10/synthesis' xml:lang='en-US'><voice name='en-US-ZiraRUS'>abracadabra</voice></speak>";
using (var result = await synthesizer.SpeakSsmlAsync(text))