C++传递指向函数错误的指针

C++ passing pointer to a function error

本文关键字:错误 指针 函数 C++      更新时间:2023-10-16

我在试图解决如何将指向函数的指针保存到变量中时遇到了一些问题。

基本上我有一个优先级队列,它由以下类型的结构组成:

typedef void (*calendar::eventPointer) ();
struct actRecord{
  double actTime;
  int prio;
  eventPointer eventPtr;
};

我想做的是调用Main.cpp中的函数Calendar::CalendarPush(),将参数timepriority和指向类(而不是对象)Transaction::Event1()的方法的指针传递给它。

但我仍然收到一个错误:

指向绑定函数的指针只能用于调用函数

完整代码:

----------MAIN.CPP--------

int main() {
    cout << "Inicializuji" << endl;
    double time = 0.0;
    int priority = 0;
    calendar cal;
    transaction tran;
    cout << "Planuji prvni event" << endl;
    cal.calendarPush(time, priority, &transaction::event1);
    return 0;
}

----------日历。--------

class calendar {
    private:
            typedef void (transaction::*eventPointer) ();
            struct actRecord{
                    double actTime;
                    int prio;
                    eventPointer eventPtr;
            };
            std::priority_queue<actRecord> cal;
    public:
            calendar();
            ~calendar();
            bool calendarEmpty();
            void calendarPush(double, int, eventPointer);
            void calendarPop();
            actRecord calendarTop();
};

----------日历.CPP--------

bool calendar::calendarEmpty() {
    return cal.empty();
}
void calendar::calendarPush(double time, int priority, eventPointer eve) {
    actRecord record;
    record.actTime = time;
    record.prio = priority;
    record.eventPtr = eve;
    cal.push(record);
}
calendar::actRecord calendar::calendarTop() {
    return cal.top();
}
void calendar::calendarPop() {
    cal.pop();
}

----------交易H---------

class transaction {
    typedef void (*eventPointer) ();
    struct actRecord{
            double actTime;
            int prio;
            eventPointer eventPtr;
    };
    public:
            void event1();
            void event2();
            void event3();
            void event4();
};

----------TRANSACTION.CPP--------

void transaction::event1() {
    return;
}
void transaction::event2() {
    return;
}
void transaction::event3() {
    return;
}
void transaction::event4() {
    return;
}

您的代码中有两个问题:

  • main中,应该传递一个指向成员函数的指针,如下所示:cal.calendarPush(time, priority, &transaction::event1);

  • 您定义了两种eventPointer类型——一种在calendar中,另一种在transaction中。方法calendarPush接受指向calendar成员的指针,而不是指向transaction成员的指针。拿定主意吧。对于您当前编译main中的代码行,应该是:例如,cal.calendarPush(time, priority, &calendar::calendarPop);,但我猜这不是您想要的。

如果您想更改为交易:

  • 确保在calendar之前定义了transaction(类似于在calendard.h中包含transaction.h

  • calendar:typedef void (*transaction::eventPointer) (); 中使用此

  • 看看上方的第一个点

更好的办法是:试着读一下std::function