自定义结构不完整

时间:2018-10-09 18:26:16

标签: c struct header

我当前的程序能够欺骗来自网络协议的数据包,这些数据包通常在libnet或libpcap中不可用。我的构建函数之一仅使用原始字节来准备数据包。为了实现更多功能,我定义了一个结构,该结构保留了所有原始数据缓冲区,因此可以快速访问它们。结构的定义是这样的:

//struct for a smb-ipc request
struct menu_smb_request{
uint8_t *nepgrotdial_lin[414];  //size 414
uint8_t *nepgrotdial_win[274];  //size 274
uint8_t *setupx_req_lin[346];   //size 346
uint8_t *setupx_req_lin2[1162]; //size 1162
uint8_t *conx_req_lin[210];         //size 210
uint8_t *trans2_req_lin[210];   //size 210
};
typedef struct menu_smb_request menu_smb_req;

该结构在自写的头文件中定义,以便于访问。 在另一个头文件中,我编写了构造函数,该函数使用此结构作为其数据源。首先,定义结构,然后将其传递给填充函数,以每次用相同的数据填充结构。然后,在构造函数中使用struc:

int smbcust(int mid, int order) {   
menu_smb_req menutob;
int smblen=0;

menubuilder(menutob);

//the structure's contents are used based on the function input

填充函数void menubuilder()如下:

void menubuilder(struct smb_request_menu menutob) {
menutob.nepgrotdial_lin = rbytetoint(very_long_byte_string)    //this 
                                                               //basically 
     //and so on                                               //translates           
}                                                              //bytes of 
                                                               //data into 
                                                               //uint8_t

当我尝试使用smbcust()(构造函数)函数编译一个简单程序时,出现以下错误消息:

error: type of formal parameter 1 is incomplete
menubuilder(menutob);

error: parameter 1 (‘menutob’) has incomplete type
void menubuilder(struct smb_request_menu menutob) {

现在,我尝试使用“ struct menu_smb_req menutob”而不是“ menu_smb_req”来初始化我的struct menutob,我一次又一次地检查了type-o,我将该结构写入了该函数的相同头文件中,我编写的结构没有缓冲区大小(仅指针),并且检查了包含标头的顺序。我究竟做错了什么?还是有一种更有效的方式来存储我的数据?我知道一个事实,即每次调用该构造函数时,都必须填充该结构,但至少不必每次都编写该构造​​函数和填充器。 在此先感谢您,如果需要我的头文件的详细版本,请发表评论。

0 个答案:

没有答案