#include <iostream>
using namespace std;
class MyClass
{
public:
void printInformation();
};
void MyClass::printInformation()
{
return;
}
int main()
{
MyClass::printInformation();
fgetc( stdin );
return(0);
}
如何在printInformation
内拨打main
功能?
该错误告诉我,我需要使用类对象来执行此操作。
答案 0 :(得分:28)
声明MyClass的一个实例,然后在该实例上调用成员函数:
MyClass m;
m.printInformation();
答案 1 :(得分:17)
如果要使代码如上所述,则需要声明函数printInformation()并将其实现为静态函数。
另一方面,如果要打印有关特定对象的信息,则需要先创建对象。
答案 2 :(得分:13)
根据您的问题,目前还不清楚您是否希望能够在没有身份的情况下使用该类,或者如果调用该方法需要您创建该类的实例。这取决于您是否希望printInformation成员编写一些一般信息或更具体的对象标识。
案例1 :您希望在不创建实例的情况下使用类。该类的成员应该是 static ,使用此关键字,您告诉编译器您希望能够调用该方法而无需创建该类的新实例。
class MyClass
{
public:
static void printInformation();
};
案例2 :您希望班级拥有实例,您首先需要创建一个对象,以便该班级具有身份一旦完成,你可以使用他的方法对象。
Myclass m;
m.printInformation();
// Or, in the case that you want to use pointers:
Myclass * m = new Myclass();
m->printInformation();
如果您不知道何时使用指针,请阅读此Stack Overflow question中的Pukku摘要。
请注意,在当前情况下,您不需要指针。 : - )
答案 3 :(得分:3)
您需要创建一个对象,因为printInformation()
是非静态的。尝试:
int main() {
MyClass o;
o.printInformation();
fgetc( stdin );
return(0);
}
答案 4 :(得分:2)
将其声明为“静态”:
static void MyClass::printInformation() { return; }
答案 5 :(得分:0)
你必须创建一个类的实例来调用方法..
答案 6 :(得分:0)
在非正式的说明中,您还可以在临时对象上调用非静态成员函数:
MyClass().printInformation();
(在另一个非正式的说明中,临时变量的生命周期结束(变量很重要,因为你也可以调用非const成员函数)出现在完整表达式的末尾( “;”))