无法在头文件中找到struct

时间:2016-03-26 02:22:07

标签: c struct header

我一直在努力完成Jon Erikson的书中的一些程序,并且我的头文件中的结构存在一些问题。我已经在" myheader-test"中声明了一些用于包头存储的结构。但是当我尝试将它们实现到程序中时,gcc告诉我结构是未声明的。 我知道正在读取头文件,因为其他程序中声明的其他函数很乐意在其他程序中工作。此外,当我尝试在main()程序中定义结构时,它告诉我它们已经在标题中声明了。

来自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;
};
在main()

#include "myheader-test.h"

来自decode funct()

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]);

来自gcc:

    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]);

我认为问题在于我在程序功能中声明了结构,但我已经过了类似的例子,并且看不出有什么不同。我也尝试过将第一次引用结构转换为main并遇到同样的问题。非常感谢任何帮助,谢谢。

1 个答案:

答案 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.