C ++从其他类调用成员函数

时间:2013-12-01 21:02:19

标签: c++ function class member

我有这个代码。只有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)。

谢谢

2 个答案:

答案 0 :(得分:0)

全局定义(在main()函数之外),然后使用

extern Calendar calendar;

位于Transaction类标题的顶部,或者您想要访问它的任何其他位置。

然而,可能有更好的方法来实现你想要做的任何事情 - 在C ++中很少需要像这样的全局变量。

答案 1 :(得分:0)

为什么不把它作为参考传递?

void Transaction::event1(Calendar &cal) {

    cout << "event1" << endl;

    cal.calendarPush(1, 1, &Transaction::event2);

}
编辑:对不起,问题刚刚出现在侧边栏上,所以我认为这是最近的......