-3

これはヘッダファイル名monitor.hです

class DSRAgent;
class Detector;
class ReputationSystem;

class Monitor {
public:
    Monitor();
    Monitor(DSRAgent* agent);
    void handleTap(const Packet* packet);
    void handlePublishInfo(nsaddr_t src, double identification, int count,rating* ratings);
    void handlePacketSent(Packet* packet);
    void publishInfo(map<nsaddr_t, rating*> ratings);
    void setNetID(nsaddr_t netid); 
    nsaddr_t getNetID();
    friend class PackTableTimer;
    void setReputationSystem(ReputationSystem* rep_system);
    bool isPACK(int uid);
    void Terminate();

    PackTableTimer* pack_table_timer;

private:
    void packTableCheck();
    map<nsaddr_t, double> published_ids;
    PackTable pack_t;
    DSRAgent* dsragent;
    Detector* detector;
    ReputationSystem* reputation_system;
    nsaddr_t net_id; 
};
class PackTableTimer : public TimerHandler {
public:
PackTableTimer(Monitor *a) : TimerHandler() { a_ = a;}
void expire(Event *e);
protected:
Monitor *a_;
};

monitor.cc である他のファイル

void PackTableTimer::expire(Event *e)
{
    a_->packTableCheck();
    resched(PACK_TIMEOUT + PACK_TIMEOUT * Random::uniform(1.0));
}

DSRAgent* dsragent;

Monitor::Monitor(DSRAgent* agent)
{ 
    this->dsragent = agent;
    this->detector = new Detector(this);
    pack_table_timer = new PackTableTimer(this);
    pack_table_timer->sched(PACK_TIMEOUT + PACK_TIMEOUT * Random::uniform(1.0));
}

void Monitor::handleTap(const Packet* packet)
{
    Behavior behavior;
    hdr_sr *srh = hdr_sr::access(packet);
    hdr_ip *iph = hdr_ip::access(packet);
    hdr_cmn *cmh = hdr_cmn::access(packet);
    ID cur_hop(srh->addrs()[srh->cur_addr()-1]);
    nsaddr_t cur_addr = cur_hop.getNSAddr_t();
    int uid = cmh->uid();
    map<int, PackData*>::iterator it;
    it = pack_t.find(uid);

次のエラーが表示されます。

**monitor.h: エラー: 'PackTableTimer' に型の名前がありません

monitor.cc: コンストラクタ 'Monitor::Monitor(DSRAgent*)' 内

monitor.cc: エラー: 'class Monitor' には 'PackTableTimer' という名前のメンバーがありません

monitor.cc: エラー: 'pack_table_timer' はこのスコープで宣言されていません**
4

2 に答える 2

1

PackTableTimerで使用する前に、前方宣言する必要がありますmonitor.h

これを他の前方宣言に入れます。

class PackTableTimer;
于 2013-04-13T16:19:13.670 に答える
1

PackTableTimer クラスの宣言がありません。

于 2013-04-13T16:06:41.590 に答える