2016-03-26 2 views
-1

Я проработал свой путь через некоторые программы из книги Джона Эриксона, и у меня возникли проблемы с структурами в моем заголовочном файле. Я объявил некоторые структуры для хранения заголовков пакетов в «myheader-test», но когда я пытаюсь реализовать их в программе, gcc сообщает мне, что структуры не объявлены. Я знаю, что файл заголовка читается, так как другие функции, заявленные в нем, работают в других программах с радостью. Также, когда я попытался определить программу int my main(), мне сказали, что они уже были объявлены в заголовке.Не удалось найти struct в заголовочном файле

из MYHEADER-test.h:

#define ETH_ADDR_LEN 6 
#define ETH_HDR_LEN 14 

struct ether_hdr 
{ 
    unsigned char ether_dest_addr[ETH_ADDR_LEN]; 
    unsigned char ether_source_addr[ETH_ADDR_LEN]; 
    unsigned short ether_type; 
}; 

в главной()

#include "myheader-test.h" 

от декодирования функц()

void decode_ethernet(const unsigned char *header_start) 
{ 

    int i; 
    const struct ether_hdr *ethernet_header; 

    ethernet_header = (const struct ether_hdr *)header_start; 
    printf("[LAYER 2 : ETHERNET HEADER]\n"); 
    printf("[Source : %02x]", ether_hdr->ether_src_addr[0]); 

и от ССЗА:

decode_sniff.c: In function ‘decode_ethernet’: 
decode_sniff.c:94:29: error: ‘ether_hdr’ undeclared (first use in this function) 
    printf("[Source : %02x]", ether_hdr->ether_src_addr[0]); 

Я думаю, что проблема в моем объявлении о структурах в функции программы, но я был по сравнению с аналогичными примерами и не может увидеть разницу. Я также попытался перенести первую ссылку на структуры в основную и имел ту же проблему. Спасибо, спасибо.

ответ

0

Вы делаете

ether_hdr->ether_src_addr[0] 

вместо

ethernet_header->ether_source[0] 
// or src_addr? dunno why it was different from the declaration before. 
+0

извинения за разницы между eth_src_addr и eth_source - пережиток пытается ковыряться, чтобы найти причину проблемы, и благодаря очень для справки - я понятия не имею, почему я звонил из имени структуры вместо того, что я только что объявил. Еще раз спасибо. – Escarii

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