好的,在我的主要我有:
void somefunction(); int main() { //bla bla bla SomeClass myclass = SomeClass(); void(*pointerfunc)() = somefunction; myclass.addThingy(pointerfunc); //then later i do myclass.actionWithDiffrentOutcomes(); } void somefunction() { //some code }
在课堂上:
class SomeClass() { public: void addThingy(void (*function)()); void actionWithDiffrentOutcomes(); private: std::vector<void (**)()> vectoroffunctions; } SomeClass::addThingy(void (*function)()) { vectoroffunctions.push_back(&function); } SomeClass::actionWithDiffrentOutcomes() { (*vectoroffunctions[0])();; }
我是一个新的指针,但我读了我的c书,谷歌,分机.这似乎是正确的,编译,运行,但当我调用“actionWithDiffrentOutcomes()”我得到访问冲突.我不知道该怎么办这似乎是正确的,但事情显然是错误的.那么当定义在另一个类中时,怎么能从类中调用一个函数?
我这样做是因为我不能将每个选项硬编码到一个switch语句中.
解决方法
你的代码几乎是正确的.你的向量错误地指向指向函数的指针,而不是简单地指向函数. addThingy将函数指针的地址添加到向量中,但是该指针在下一行中超出范围.
更改你的代码如下:
//Store pointers to functions,rather than //pointers to pointers to functions std::vector<void (*)()> vectoroffunctions; SomeClass::addThingy(void (*function)()) { //Don't take the address of the address: vectoroffunctions.push_back(function); }