这可能会被延迟,我已经搜索并尝试了很多解决方案,但我总是会遇到错误。
class mainStateMachine;
typedef void (mainStateMachine::*StateProc)( EIndication input);
class mainStateMachine
{
public:
StateProc currentState;
int transition;
void rotateUntilBlobsFound ( EIndication input);
void clarifyImage (EIndication input);
}
然后:
main()
{
int input=0;
StateProc BLA;
mainStateMachine mainMachine;
mainMachine.currentState=&mainStateMachine::rotateUntilBlobsFound;
BLA=mainMachine.currentState;
BLA(input);
}
由于某些原因,这不起作用,告诉我"必须使用'。'或者' - > '在' BLA(...)"中调用指向成员的功能但即使我做* BLA(输入);它没有用。 我真的不明白为什么这不起作用。
答案 0 :(得分:1)
BLA需要一个指向实例的指针,因为成员函数指针不能直接自行解除引用(调用它们的函数)。必须代表某个对象调用它们,然后提供" this"成员函数使用的指针。如果函数不知道它在哪个对象上运行,你怎么能做影响对象实现的事情呢。
这就是你如何调用分配给BLA的方法:
(mainMachine.*BLA)( input);
您还可以考虑使用boost::function
或std::function
而不是原始指针来简化操作,例如:
std::function< void(const mainStateMachine&, EIndication)> f_ptr =
&mainMachine::rotateUntilBlobsFound;
const mainStateMachine foo;
f_ptr( foo, EIndication());
答案 1 :(得分:0)
除了其他错误,例如类定义后没有分号,main
上没有返回类型,指向成员的指针需要一个对象来操作。您可以使用指向成员运算符的指针来提供一个:
(mainMachine.*BLA)(input);
作为成员函数的指针,所有BLA
包含的是成员函数的地址,而不是与其一起使用的任何对象。