我一直在努力解决如何将函数指针保存到变量中的问题。
基本上我有一个优先级队列,它由这种类型的结构组成:
typedef void (*calendar::eventPointer) ();
struct actRecord{
double actTime;
int prio;
eventPointer eventPtr;
};
我想要做的是在Calendar::CalendarPush()
中调用函数Main.cpp
,传递参数time
,priority
和指向类的方法(而不是对象){ {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();
};
答案 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
)
在calendar
:typedef void (*transaction::eventPointer) ();
查看上面的第一点
什么会更好:尝试阅读std::function
。