没有对象不能调用成员函数
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.test
或variable.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()
【讨论】:
以上是关于没有对象不能调用成员函数的主要内容,如果未能解决你的问题,请参考以下文章