2010-12-06 30 views
2

J'ai une fonction de rappel appelée got_packet:Comment obtenir un membre d'un pointeur sur une instance d'une structure?

void got_packet(u_char *args, const struct pcap_pkthdr *header, const u_char *packet) { 
    WMShark *shark = (WMShark *)args; 

    WMPacket *foundPacket = [[WMPacket alloc] init]; 
    foundPacket.packetNumber = [[shark capturedPackets] count]; 

    foundPacket.timeStamp = header.ts; // <-- PROBLEM IS HERE 

    ... 

    NSLog(@"%@: %s", shark, packet); 
} 

je reçois une erreur de compilation error: request for member 'ts' in something not a structure or union sur la ligne foundPacket.timeStamp = header.ts;.


La documentation dit:

...
un pointeur pcap_pkthdr struct const à une structure avec les mem-bres suivants:

  • ts - une struct timeval contenant la heure à laquelle le paquet a été capturé

...


Comment puis-je accéder ts? Merci.


Pour les développeurs C-die-hard, sont utilisés les crochets en Objective-C, une surcouche de C. Vous pouvez ignorer cela, ils sont initializers dans ce cas.

Répondre

3

Comme vous avez le pointeur sur struct, utilisez l'opérateur -> au lieu de .:

header->ts 
+0

Merci Dieu pour vous existant! = D –

+0

:-) En guise d'alternative, (* header) .ts devrait également servir. – Eiko

2

header est un pointeur. Vous pouvez y accéder comme cette header->ts

1

Comme header est un pointeur vers une instance pcap_pkthdr, il doit être déréférencé en utilisant -> comme ceci:

header->ts