C ++将指针传递给函数错误

时间:2013-11-30 11:11:20

标签: c++ function pointers

我一直在努力解决如何将函数指针保存到变量中的问题。

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

typedef void (*calendar::eventPointer) ();

struct actRecord{
  double actTime;
  int prio;
  eventPointer eventPtr;
};

我想要做的是在Calendar::CalendarPush()中调用函数Main.cpp,传递参数timepriority和指向类的方法(而不是对象){ {1}}。

但我仍然收到错误:

  

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

整个代码:

---------- ---------- Main.cpp的

Transaction::Event1()

---------- ---------- CALENDAR.H

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;
}

---------- ---------- CALENDAR.CPP

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();
};

---------- ---------- TRANSACTION.H

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();
}

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

class transaction {

    typedef void (*eventPointer) ();

    struct actRecord{
            double actTime;
            int prio;
            eventPointer eventPtr;
    };

    public:
            void event1();
            void event2();
            void event3();
            void event4();
};

1 个答案:

答案 0 :(得分:2)

您的代码中存在两个问题:

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

  • 您定义了两种eventPointer类型 - 一种位于calendar,另一种位于transaction。您的方法calendarPush接受指向calendar成员的指针,而不是transaction成员。在这个决定你的决心。对于当前编译main中的行的代码,请阅读:cal.calendarPush(time, priority, &calendar::calendarPop);例如,但我猜这不是您想要的。

如果您想更改为交易:

  • 确保在transaction之前定义calendar(例如在transaction.h中包括calendard.h

  • calendartypedef void (*transaction::eventPointer) ();

  • 中使用此功能
  • 查看上面的第一点

什么会更好:尝试阅读std::function