Я сталкиваюсь с проблемой при реализации таймера в NS2.Я хочу реализовать таймер, который по истечении просто печатает «истек». Код выглядит следующим образом:
fap.h:
class Fap;
class HelloTimer : public TimerHandler
{
public:
HelloTimer(Fap* fapAgent) : TimerHandler(){agent = fapAgent;}
protected:
Fap* agent;
inline virtual void expire(Event* e);
};
class Fap : public Agent
{
public:
Fap(void);
int filter[ADDRESS_SPACE];
int address;
int netId;
int requestedIp;
bool configured;
nsaddr_t requestor;
nsaddr_t initiator;
HelloTimer helloTimer;
TcpAgent* tcp;
NsObject* ll;
void recv(Packet* p, Handler*);
void sendHello(void);
int command(int, const char* const*);
};
fap.cc
void HelloTimer:: expire(Event* event)
{
//agent->sendHello();
printf("expired\n");
}
int Fap::command(int argc, const char* const* argv)
{
Tcl& tcl = Tcl::instance();
if(argc == 2)
{
if(strcmp(argv[1], "hello") == 0)
{
helloTimer.resched(30); //problem occurs here
helloTimer.status(); //no problem with this
return (TCL_OK);
}
}
else if(argc == 3)
{
if(strcmp(argv[1], "set-ll") == 0)
{
NsObject* temp;
temp = (NsObject*)(TclObject::lookup(argv[2]));
ll = temp;
return (TCL_OK);
}}
else
{
printf("invalid number of args");
}
Agent::command(argc,argv);
return(TCL_OK);
}
Добавлены только соответствующие части кода. Когда я пытаюсь перепланировать таймер с помощью resched (), возникает ошибка сегментации. Я что-то пропустил?
Это происходит в результате конфликта имен классов. Просто добавьте префикс к вашему имени класса таймера.
Других решений пока нет …