2015-11-08 5 views
0

У меня есть вопрос. Я действительно надеюсь, что кто-то может помочь мне или указать мне в правильном направлении. В принципе у меня есть следующий C++ код:Вызов класса C++ из другого класса

void ComparePackets::run_timer(Timer *) 
{ 
    Packet *p = input(1).pull(); 
    if (p) 
     p->kill(); 
    _timer.reschedule_after(_interval); 
} 

и мне нужно позвонить/запустить этот код внутри следующего блока кода:

void ComparePackets::check(Packet *p, Packet *p) 
{ 
    bool different = false; 
    if (p->length() != q->length()) 
    different = true; 
    do 
    { 
     ////Insert code to call ComparePackets::run_timer(Timer *) code here/// 
    } 
    while (p->length() == 106); 
} 

Я попытался все, что я знаю, (правда, не так много), но просто продолжайте получать сообщения об ошибках при компиляции всего кода. Идея этого фрагмента кода состоит в том, чтобы отбросить пакеты из одного интерфейса с предустановленными интервалами, когда на другом интерфейсе появятся пакеты длиной 106 байт. Любая помощь очень ценится!

Класс ComparePackets является:

class ComparePackets : public Element { public: 

ComparePackets() CLICK_COLD; 
//TimedSink() CLICK_COLD; 

const char *class_name() const  { return "ComparePackets"; } 
const char *port_count() const  { return "2/2"; } 
const char *processing() const  { return PULL; } 
//int configure(Vector<String> &, ErrorHandler *) CLICK_COLD; 
int initialize(ErrorHandler *) CLICK_COLD; 
void cleanup(CleanupStage) CLICK_COLD; 
//void add_handlers() CLICK_COLD; 

Packet *pull(int); 
void run_timer(Timer *);/////////// 

частные:

Packet *_p[2]; 
bool _available[2]; 
NotifierSignal _signal[2]; 

bool _timestamp : 1; 
Timer _timer;/////////////////// 
Timestamp _interval;//////////////// 

//uint32_t _ndiff; 
//enum { D_LEN, D_DATA, D_TIMESTAMP, D_NETOFF, D_NETLEN, D_NETHDR, 
    // D_MORE_PACKETS_0, D_MORE_PACKETS_1, D_LAST }; 
//uint32_t _diff_details[D_LAST]; 

void check(Packet *, Packet *); 
//static String read_handler(Element *, void *) CLICK_COLD; 
//static int write_handler(const String &, Element *, void *, ErrorHandler *) CLICK_COLD; 

};

+0

Любая причина не использовать this-> runTimer (Arg) или просто runTimer (Arg) в цикле? – user3147395

+0

Не могли бы вы также поделиться объявлением класса 'ComparePackets'? –

+0

дважды используйте аргумент 'p' (дублируется). ЕСЛИ У ВАС ЕСТЬ СООБЩЕНИЕ ОШИБКИ, вот важная информация, без помощи. –

ответ

0

у вас есть двойное определение для p !!

void ComparePackets::check(Packet *p, Packet *p) 

фикс:

void ComparePackets::check(Packet *p, Packet *q) 
+0

Большое спасибо آدم قنوات, это была опечатка с моей стороны, извините за это. –

+0

Класс ComparePackets: –

Смежные вопросы