Определение данных не имеет типа или класса хранения - PullRequest
1 голос
/ 23 февраля 2012

Я пытался выделить память для указателя структуры. Вот сокращенный код - не могли бы вы сказать, что я сделал не так?

can.h

#ifndef CAN_H_
#define CAN_H_

typedef struct {
  u32  id;
  u32  mask;
  char length;
  char data[8];
  char status; 
} CAN_PACKET;

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)
  {
        }
}

Я получаю эти ошибки / предупреждения:

Предупреждение 1 Определение данных не имеет типа или класса хранения c: \ users \ blu \ documents \ avrstudio \ Can5 \ Can5 \ Can5.c 20 2 Can5

Предупреждение 2 типа по умолчанию имеет значение 'int' в объявлении 'packet_Tx' 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 закомментированы. Большое спасибо, ребята.

1 Ответ

9 голосов
/ 23 февраля 2012

В C вы не можете иметь код вне функций. Переместите эти две строки:

packet_Tx = (CAN_PACKET*)malloc(sizeof(CAN_PACKET));  
packet_Tx = &packet1; packet_Rx = &packet2;

В начало метода main():

int main(void)
{
   packet_Tx = (CAN_PACKET*)malloc(sizeof(CAN_PACKET));  
   packet_Tx = &packet1; packet_Rx = &packet2;
...