我有这个代码。只有2个小班和主。
----------MAIN.CPP----------
#include <iostream>
#include "Calendar.h"
#include "Transaction.h"
using namespace std;
int main() {
cout << "Inicializuji" << endl;
double Time = 0.0;
Calendar calendar;
cout << "Vkladam uvodni udalost" << endl;
calendar.calendarPush(Time, 1, &Transaction::event1);
calendar.calendarRun();
}
----------CALENDAR.H----------
#include <iostream>
#include <queue>
using namespace std;
class Calendar;
class Transaction;
typedef void (Transaction::*eventPointer)();
struct activationRecord {
double Time;
int Priority;
eventPointer activationEvent;
};
class Calendar {
private:
std::priority_queue<activationRecord> activationCalendar;
public:
bool calendarEmpty();
void calendarPush(double, int, eventPointer);
activationRecord calendarTop();
void calendarPop();
void calendarRun();
};
----------CALENDAR.CPP-----------
#include "Calendar.h"
#include "Transaction.h"
bool Calendar::calendarEmpty() {
return activationCalendar.empty();
}
void Calendar::calendarPush(double Time, int Priority, eventPointer event) {
activationRecord record;
record.Time = Time;
record.Priority = Priority;
record.activationEvent = event;
activationCalendar.push(record);
}
activationRecord Calendar::calendarTop() {
return activationCalendar.top();
}
void Calendar::calendarPop() {
activationCalendar.pop();
}
void Calendar::calendarRun() {
Transaction transaction;
activationRecord record;
while(!calendarEmpty()) {
record = calendarTop();
calendarPop();
(transaction.*record.activationEvent)();
}
}
bool operator < (const activationRecord & a, const activationRecord & b) {
return a.Time > b.Time;
}
----------TRANSACTION.H----------
#include <iostream>
using namespace std;
class Transaction;
class Calendar;
class Transaction {
public:
void event1();
void event2();
};
----------TRANSACTION.CPP-----------
#include "Transaction.h"
#include "Calendar.h"
using namespace std;
void Transaction::event1() {
cout << "event1" << endl;
calendar.calendarPush(1, 1, &Transaction::event2);
}
void Transaction::event2() {
cout << "event2" << endl;
}
简要说明,到目前为止我所拥有的是类Calendar,它被认为是保存优先级队列activationCalendar,它包含struct activationRecord类型的记录
typedef void (Transaction::*eventPointer)();
struct activationRecord {
double Time;
int Priority;
eventPointer activationEvent;
};
和几个使用优先级队列操作的方法。
我想要做的主要是通过调用
将第一个条目放入优先级队列calendar.calendarPush(Time, 1, &Transaction::event1);
非常好。但这就是我遇到的问题。然后我需要打电话
calendar.calendarRun();
从activationCalendar获取第一个条目并调用指向它包含的方法的指针,执行该方法应该做什么,而不是在其体内推送(计划)下一个记录到activationCalendar中。
我试图让event1将event2推送到callendar但显然不成功,因为我没有从Transaction类中调用calendarPush的对象。
void Transaction::event1() {
cout << "event1" << endl;
calendar.calendarPush(1, 1, &Transaction::event2);
}
有没有办法如何获取我在main()中定义的日历对象(到类Transaction)。
谢谢
答案 0 :(得分:0)
全局定义(在main()
函数之外),然后使用
extern Calendar calendar;
位于Transaction类标题的顶部,或者您想要访问它的任何其他位置。
然而,可能有更好的方法来实现你想要做的任何事情 - 在C ++中很少需要像这样的全局变量。
答案 1 :(得分:0)
为什么不把它作为参考传递?
void Transaction::event1(Calendar &cal) {
cout << "event1" << endl;
cal.calendarPush(1, 1, &Transaction::event2);
}
编辑:对不起,问题刚刚出现在侧边栏上,所以我认为这是最近的......