从另一个方法调用非静态成员方法

acl*_*ark 8 c++ methods static-methods class

有没有办法从c ++主类中包含的另一个方法调用非静态类成员方法?如果是这样,代码会是什么样的?

问题是,我不能将这个specfic方法声明为static,因为它使用同一个类中的其他方法,如果我将其静态化,则不起作用.

我正在尝试使用:

MyClass::myClassMethod();
Run Code Online (Sandbox Code Playgroud)

从主类中的方法,但它给我错误:非静态成员引用必须相对于特定对象.

为了澄清,myClassMethod()使用MyClass中的其他方法,如:

void myClassMethod() {
    ...
    anotherClassMethod();
}
Run Code Online (Sandbox Code Playgroud)

因此,如果我将myClassMethod设为静态,则会干扰调用anotherClassMethod().

Alo*_*ave 5

static成员函数调用非静态成员函数是怎么回事?

this除了您传递的参数之外,每个非静态成员函数都会隐式传递一个指针,然后将传递的指针取消引用以引用类对象成员但是static函数没有通过隐式this指针传递,因此不能在内部调用任何非静态成员函数静态成员函数因为没有this这样做。

解决方案是什么,如果您仍然想这样做?

您将需要某种机制来获取指向静态方法内的对象的指针,然后您可以使用该指针调用成员函数。
怎么做?
您必须全局存储指向类对象的指针,或者将其作为实例传递给静态方法的函数参数之一。

但是,以上都是变通方法,这里要注意的重要一点是,如果您觉得需要通过静态成员函数调用非静态成员函数,那么您的设计就有问题。


再想一想,也许我之前误读了您的问题,可能,您的问题是:

如何调用类的非静态成员函数main

您需要一个类的实例来调用非静态成员函数。
那么简单,

MyClass obj; 
obj.myClassMethod();   
Run Code Online (Sandbox Code Playgroud)

从内部调用任何其他成员函数myClassMethod()只是:

void myClassMethod()
{
   //...
   anyOtherMyClassNonStaticMemberFunction(); 
   //...
}
Run Code Online (Sandbox Code Playgroud)