Avatar billede conrad Nybegynder
05. oktober 2003 - 11:56 Der er 6 kommentarer og
1 løsning

argumenter til funktion

beklager den dårlige titel
Jeg har følgende funktions erklæring
void
DSRAgent::recv(Packet* packet, Handler*)

Første argument er en pointer kaldet packet til en Packet, men hvad er meningen med det sidste argument?
Avatar billede arne_v Ekspert
05. oktober 2003 - 12:08 #1
Det er andet argument som er pointer til handler.

I C/C++ kan man erklære på to måder:

void x(int *i);

eller:

void x(int *);

d.v.s. at argument navnet er optional i erklæringen.

I implementeringen skal det naturligvis angives:

void x(int *i)
{
}
Avatar billede conrad Nybegynder
05. oktober 2003 - 12:14 #2
det er i selve implementeringen det står sådan

uddrag af kode..
void
DSRAgent::recv(Packet* packet, Handler*)
  /* handle packets with a MAC destination address of this host, or
    the MAC broadcast addr */
{
  hdr_sr *srh =  hdr_sr::access(packet);
  hdr_ip *iph =  hdr_ip::access(packet);
  hdr_cmn *cmh =  hdr_cmn::access(packet);

  // special process for GAF
  if (cmh->ptype() == PT_GAF) {
    if (iph->daddr() == (int)IP_BROADCAST) {
      if(cmh->direction() == hdr_cmn::UP)
    cmh->direction() = hdr_cmn::DOWN;
      Scheduler::instance().schedule(ll,packet,0);
      return;
    } else {
      target_->recv(packet, (Handler*)0);
      return;     
    }
  }

  assert(cmh->size() >= 0);
....
Avatar billede arne_v Ekspert
05. oktober 2003 - 12:22 #3
Det vil jeg mene er en fejl.

Du kan jo ikke bruge et argument som du ikke har et navn på.
Avatar billede arne_v Ekspert
05. oktober 2003 - 12:24 #4
Det kan naturligvis være at det ike skal bruges, men hvordor så have det.
Avatar billede conrad Nybegynder
05. oktober 2003 - 12:26 #5
det bliver brugt her: target_->recv(packet, (Handler*)0);
Kan det have noget at gøre med at DSRAgent nedarver og overrider recv()?
Avatar billede arne_v Ekspert
05. oktober 2003 - 12:48 #6
De to ting har intet med hinaden at gøre.

DSRAgent::recv(Packet* packet, Handler*)

erlærer et andet argument til at være pointer til handler.

target_->recv(packet, (Handler*)0);

kalder en metode med et andet argument som er en NULL pointer
til handler.

Men det er bare to typer som er det samme.
Avatar billede conrad Nybegynder
05. oktober 2003 - 13:14 #7
Ok jeg accepterer at tingene er som de er. Tak for hjælpen arne
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester