我有两个类;
编码器.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
senarioControl
是stations[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();