我想编写一个静态create方法,我从基类中调用非静态方法。
<BaseClass.h>
class BaseClass
{
public:
void method();
}
<MyClass.h>
class MyClass : public BaseClass
{
static MyClass* createMyClass();
}
<MyClass.cpp>
...
MyClass* MyClass::createMyClass()
{
MyClass* myclass = new MyClass();
method(); // Error, illegal call of non-static member function
return myclass;
}
...
所以我必须在createMyClass方法之外调用我的基类方法,还是有可能在里面调用它?
答案 0 :(得分:7)
需要在实例上调用非静态方法,并且编译器不会假装足够聪明,无法知道要在其上调用哪个实例(除非您在实例方法中)。您需要在刚刚创建的MyClass
实例上显式调用该方法:
myclass->method();
(另一种思考方式:在非静态上下文中,使用语法method();
调用方法相当于this->method();
。因为你没有“this”在静态环境中,您需要自己提供“this”。)