2012-02-22 58 views
1

我試圖將存儲分配給結構指針。這裏是缺陷的代碼 - 你能告訴我我做錯了什麼嗎?數據定義沒有類型或存儲類

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

錯誤3'packet_Tx'的衝突類型c:\ user5 \ Can5 \ Can5.c c:\ users \ blu5 \ \ 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:\用戶\藍光\文件\ AVRSTUDIO \ Can5 \ Can5 \ Can5.c 20 14 Can5

當packet_Tx賦值行被註釋掉時,代碼的其餘部分符合要求。非常感謝你們。

+6

什麼沒有工作?你怎麼知道?之後你對packet_pt做了什麼? – zmbq 2012-02-22 22:02:04

+3

你的例子是100%正確的,所以「沒有工作」有點含糊......不過,請不要在C中對'malloc()'調用的返回值進行類型轉換。 – 2012-02-22 22:06:48

+1

不,你沒有。 – asaelr 2012-02-22 22:14:20

回答

9

在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; 
+0

我再次檢查,只是爲了確保main()中只有一個packet_pt ...任何其他想法?謝謝 – greywolf274 2012-02-22 22:48:12

+0

@ greywolf274我們需要更多信息 - 請參閱我對您問題的評論。此外,您是否複製並粘貼代碼片段,或者再次寫出它們?如果你再次將它們寫出來,請注意在提問時你沒有意外地糾正錯誤;) – 2012-02-22 22:51:35

+0

@ greywolf274我已經更新了我的答案:) – 2012-02-22 23:26:19

相關問題