【发布时间】:2012-03-12 21:31:17
【问题描述】:
这个问题类似于我正在尝试做的 Calling C++ member function pointer from a struct 。 但是,我的结构包含一个成员函数指针,该指针在不同的类中定义,然后是在其中定义和使用该结构的类。这是一些示例代码,说明了我的类、结构和函数指针的布局方式。
// Alpha.h:
class Alpha{
public:
void function1(char name[], int number);
void function2(char name[], int number);
void function3(char name[], int number);
typedef void (Alpha::*My_func_ptr)(char name[], int number);
static My_func_ptr functionTable[];
};
// Alpha.cpp:
#include "Alpha.h"
Alpha::My_func_ptr Alpha::functionTable[] = {
&Alpha::function1,
&Alpha::function2,
&Alpha::function3
};
void Alpha::function1(char name[], int number)
{
//some stuff
}
void Alpha::function2(char name[], int number)
{
//some stuff
}
void Alpha::function3(char name[], int number)
{
//some stuff
}
// Beta.h:
#include "Alpha.h"
typdef struct{
char bName[10];
Alpha::My_func_ptr fptr;
}ptr_structure;
class Beta{
public:
void betafunction();
Alpha alphaobject;
ptr_structure str_array[3];
};
// Beta.cpp:
#include "Beta.h"
void betafunction()
{
str_array[0].fptr = alphaobject.functionTable[0];
str_array[1].fptr = alphaobject.functionTable[1];
str_array[2].fptr = alphaobject.functionTable[2];
(str_array[0].fptr)("name", 1); //gives error expression must have
//(pointer-to-) function type
(this->*str_array[0].fptr)("name", 1);
//error pointer-to-member selection class types are incompatible "Beta" and "Alpha"
//sample function pointer call using function table from other class,
//this syntax compiles and runs without error.
(alphaobject.*Alpha::functionTable[0]("name", 1);
}
如您所见,我可以从数组中调用函数指针,但似乎无法弄清楚如何从结构数组中调用函数指针。
【问题讨论】:
-
请尝试区分
function pointer和member function pointer,它们非常不同。 -
另外,您的代码无法编译(例如,一个错字
typdef)。始终照原样复制代码。 -
谢谢 Jesse,我应该编辑标题还是将其添加到问题文本中?
-
Ed S,感谢您的建议,但是这将涉及几个大文件和大量无关信息,这些信息会减损与我的问题相关的代码的重要部分。
-
不,我只是想复制和粘贴,而不是输入内容。我假设您的代码确实可以编译,但不会因为拼写错误。
标签: c++ arrays function-pointers structure