我的类中有方法的指针数组,但我不能调用我的方法.代码如下

I have array of pointers of methods my class, but I cannot call my method. Code are below

本文关键字:我的 调用 不能 方法 代码 有方法 数组 指针      更新时间:2023-10-16
#include <iostream>
#include <stdio.h>
#include <stdint.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */

class FooBar{
public:
typedef void(FooBar::*OnDio)(void);
void OnDio0Irq( void ){
printf("dio0n");
};
void OnDio1Irq( void ){
printf("dio1n");
};
FooBar(){
OnDio  dioArray[] = {&OnDio0Irq, &OnDio1Irq};

};

OnDio  *dioArray[2];
private:

};

int main(int argc, char* argv[]){
typedef void(FooBar::*OnDio)(void);
void (FooBar::*foo)(void);
OnDio *myPtr;
FooBar *fb = new FooBar();

myPtr = *(&fb->dioArray[0]);
foo = (OnDio &)(myPtr[0]);
(foo)();//me need call fb->dioArray[0]()
(*myPtr)(); // ?
}

如何从数组中调用函数?在我的代码中,我有错误:

[Error]必须使用''或'->'调用指向'foo中成员函数的指针(…)',例如'(…->*foo)(…)'

[Error]必须使用">'或'->'调用指向中成员函数的指针'*myPtr(…)',例如'(…->**myPtr)(…)'

要调用指向成员函数(ptmf)的指针,需要一个实例和ptmf。

OnDio已经被类型化为指针类型,所以你可能不想要OnDio指针。

此外,您在构造函数中初始化一个本地临时,而不是"this"实例的dioArray。

这个答案也很有用:C++:指向不同函数的成员函数指针数组

这是您的代码,更正为通过指向成员函数的指针调用dio0。

#include <iostream>
#include <stdio.h>
#include <stdint.h>
class FooBar {
public:
typedef void(FooBar::*OnDio)(void);
void OnDio0Irq(void) {
printf("dio0n");
};
void OnDio1Irq(void) {
printf("dio1n");
};
FooBar() {
// declaring a local OnDio array just masks the actual member and then it gets tossed
// need to initialize this instance, not some local temporary
dioArray[0] = &FooBar::OnDio0Irq;
dioArray[1] = &FooBar::OnDio1Irq;
};
OnDio dioArray[2];
private:
};
int main(int argc, char* argv[]) {
// need instance
FooBar fb;
// need pointer to member function
FooBar::OnDio func = fb.dioArray[0];
// call pointer to member function using instance
(fb.*func)();
}
#include <iostream>
#include <stdio.h>
#include <stdint.h>

class FooBar {
public:
typedef void(FooBar::*OnDio)(void);
OnDio dioArray[2];
void OnDio0Irq(void) {
printf("dio0n");
};
void OnDio1Irq(void) {
printf("dio1n");
};
FooBar() {
dioArray[0] = &FooBar::OnDio0Irq;
dioArray[1] = &FooBar::OnDio1Irq;
};

private:
};
int main(int argc, char* argv[]) {
FooBar* fb  = new FooBar();
for (int i = 0; i < sizeof(fb->dioArray) / sizeof(fb->dioArray[0]); i++)
{
(fb->*fb->dioArray[i])();
}
}
相关文章: