数据定义没有类型或存储类

gre*_*274 1 c malloc struct pointers typedef

我试图将存储分配给结构指针.这是代码 - 你能告诉我我做错了什么吗?

can.h对应

#ifndef CAN_H_
#define CAN_H_

typedef struct {
  u32  id;
  u32  mask;
  char length;
  char data[8];
  char status; 
} CAN_PACKET;
Run Code Online (Sandbox Code Playgroud)

project.c

#include "can.h"

CAN_PACKET *packet_Tx, *packet_Rx;
CAN_PACKET packet1, packet2;
packet_Tx = (CAN_PACKET*)malloc(sizeof(CAN_PACKET));      /* line 20 in text */
packet_Tx = &packet1; packet_Rx = &packet2;

int main(void)
{
  while(1)
  {
        }
}
Run Code Online (Sandbox Code Playgroud)

我收到这些错误/警告:

警告1数据定义没有类型或存储类c:\ users\blu\documents\avrstudio\Can5\Can5\Can5.c 20 2 Can5

警告2类型在'packet_Tx'的声明中默认为'int'c:\ users\blu\documents\avrstudio\Can5\Can5\Can5.c 20 2 Can5

错误3'packet_Tx'c的冲突类型:\ users\blu\documents\avrstudio\Can5\Can5\Can5.c 20 2 Can5

错误4先前'packet_Tx'的声明在这里c:\ users\blu\documents\avrstudio\Can5\Can5\Can5.c 18 13 Can5

警告5初始化从指针生成整数而没有强制转换c:\ users\blu\documents\avrstudio\Can5\Can5\Can5.c 20 14 Can5

当packet_Tx分配行被注释掉时,其余代码符合要求.非常感谢你们.

Tim*_*nes 9

在C中,您不能在函数外部使用代码.移动这两行:

packet_Tx = (CAN_PACKET*)malloc(sizeof(CAN_PACKET));  
packet_Tx = &packet1; packet_Rx = &packet2;
Run Code Online (Sandbox Code Playgroud)

main()方法的顶部:

int main(void)
{
   packet_Tx = (CAN_PACKET*)malloc(sizeof(CAN_PACKET));  
   packet_Tx = &packet1; packet_Rx = &packet2;
Run Code Online (Sandbox Code Playgroud)