从另一个类的静态成员调用一个类的非静态成员



我有两个类;

编码器.h

#include "stationControl.h"
public:
static void getLocation();
static stationControl *station1;
static stationControl *station2;
static stationControl *station3;
private:
static stationControl *stations[3];

编码器.cpp

#include "encoder.h"
stationControl *encoder::station1;
stationControl *encoder::station2;
stationControl *encoder::station3;
stationControl *encoder::stations[] = {encoder::station1,encoder::station2,encoder::station3};
void encoder::getLocation()
{
*stations[1]->*stationControl::senarioControl(); // Here is the problematic line
}

stationControl.h

public:      
void (stationControl::*senarioControl)();
void controlOut();

stationControl.cpp

#include "stationControl.h"
stationControl::stationControl()
{   
senarioControl= &stationControl::controlOut;
}
void stationControl::controlOut()
{
// some staffs...
}
  • 我需要编码器中的静态stationControl对象。h
  • 我需要每个stationControl对象的非静态controlOut函数(每个函数对其对象都是特殊的(
  • 我需要为controlOut函数创建一个指针作为senarioControl
  • 我需要从编码器调用senarioControl指针::getLocation

正如上面encoder.cpp中的代码(用"//这是有问题的行"签名(一样,我得到了一个错误:;

invalid use of member 'stationControl::senarioControl' in static member function

senarioControlstations[1]的成员,因此您可以像所有成员一样以的身份访问它

stations[1]->senarioControl

然后相对于stations[1]取消引用它,记住需要括号:

stations[1]->*(stations[1]->senarioControl)

然后调用函数,由于优先级规则,您需要另一对括号:

(stations[1]->*(stations[1]->senarioControl))();

这是如此的不可读,以至于添加另一个只通过函数指针调用的成员是很常见的:

class stationControl
{
public:
void callScenario() { (this->*senarioControl)(); }
...

这样你就可以编写可读性更强的

stations[1]->callScenario();

相关内容

  • 没有找到相关文章

最新更新