HI, dear users
I'm writing a new agent and I declared some data member in my AgentDISK.h
...private:            double idle_time_disk;...

But when I Make the .o file 
And the error message said these variables was not declared 
I'm so confused Because in another new Agent written by myself
I used the same way to declared the variables, and it works without any problem.
Did anyone have experience like this?
Here I attached my files
                                          
#include "packet.h"
#include "random.h"
#include "ip.h"
#include "AgentDISK.h"
//double idle_time_disk=0.0;
//double total_time_disk=0.0;
//double packet_send_time_disk=0.0;
//double check=0.0;

static class DISKClass : public TclClass {
public:
        DISKClass() : TclClass("Agent/AgentDISK") {}
        TclObject* create(int, const char*const*) {
                return (new AgentDISK());
        }
}class_cpu_agent;


AgentDISK::AgentDISK() : Agent(PT_TASK)
{
//      double idle_time_disk=0.0;      
//      AgentDISK::hi=0;
//      packet_send_time_disk=0.0;
//      total_time_disk=0.0;
//      idle_time_disk=0.0;     
        bind("total_time_disk",&total_time_disk);
        bind("idle_time_disk",&idle_time_disk);
        bind("check",&check);
}
void AgentDISK::recv(Packet* pkt, Handler*)  // 尚未紀錄CPU的busytime
{
        double local_time = Scheduler::instance().clock();
        printf("recv by disk\n");
        if(packet_send_time_disk!=0.0)
        {
                if(local_time>packet_send_time_disk)
                        idle_time_disk += local_time-packet_send_time_disk;
        }
                hdr_task* task=(hdr_task*) hdr_task::access(pkt);
                hdr_ip* ip=(hdr_ip*) hdr_ip::access(pkt);

                double temp = task->total_time;

        //      printf("recv disk\n");
                double hold_time =Random::exponential(0.2);
                temp=temp+hold_time;

                check +=temp;
                packet_send_time_disk=local_time+hold_time;
                printf("daddr is %d\n",ip->daddr());
                Scheduler& s =Scheduler::instance();    
                //double delay = Random::exponential(0.2);
                Packet *p = allocpkt();
                hdr_task* taskp=(hdr_task*) hdr_task::access(p);
                taskp->total_time=temp;
                taskp->number=task->number;
                Packet::free(pkt);
                s.schedule(target_,p,hold_time);

}
#ifndef ns_disk_h
#define ns_disk_h


#include <tclcl.h>
#include "agent.h"
#include "config.h"
#include "packet.h"
#include "timer-handler.h"
#include "app.h"

#include "trafgen.h"
#include "myAgent/AgentCPU.h"
//#include "udp.h"
/*class AgentDISK;

class pkt_timer::public TimerHandler {
        public:
        pkt_timer[AgentDISK* agent]:TimerHandler()
        {
                agent_=agent;
        }
        inline virtual void expire (Event* e);
        protected:
        AgentDISK* agent_;
}*//*
struct hdr_task {
        float execute_time;     
        int total_time;

        int size_;
        int number;
        int& size() { return size_;}
        static int offset_;
        inline static int& offset() { return offset_; }
        inline static hdr_task* access (const Packet* p) {
                return (hdr_task*) p->access(offset_);
        }
};*/
class AgentDISK : public Agent {

public:
        AgentDISK();
//      void send_pkt();
        virtual void recv(Packet *, Handler *);
        

private:
        double busy_time_;
        double execute_time_;
        double execute_time_exp;
        double record_packet_Time_;
        int npkts_;
        
};

#endif 
#ifndef pkt_task_h_
#define pkt_task_h_

#include <packet.h>

#define HDR_TASK(p) hdr_task::access(p)

struct hdr_task {
        double total_time;
        double number;
        int state;
        int size_;

        int& size() { return size_;}
        static int offset_;
        inline static int& offset() { return offset_; }
        inline static hdr_task* access (const Packet* p) {
                return (hdr_task*) p->access(offset_);
        }
};

#endif

Reply via email to