2012-02-22 173 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を持っていません:\ユーザー\ blu \ documents \ avrstudio \ Can5 \ Can5 \ Can5.c 20 Can5

警告 'packet_Tx' c:¥users¥blu¥documents¥avrstudio¥Can5¥Can5¥Can5.cの宣言で、2つのタイプのデフォルト値は「int」です。「packet_Tx」cの3つのタイプが競合します。c: \ users \ blu \ documents \ avrstudio \ Can5 \ Can5 \ Can5.c 20 2 Can5

エラー 'packet_Tx'の前回の宣言は、ここではc:\ users \ blu \ documents \ avrstudio \ Can5 \ Can5 \ Can5です。 C 5初期警告18 13 Can5

キャストCなしポインタから整数を作る:\ユーザー\ブルの\ドキュメント\ avrstudio \ Can5 \ Can5 \ Can5.c 20 14 Can5

パケットの残りの部分は、packet_Txの割り当て行がコメントアウトされていれば問題ありません。ありがとう、たくさんの人。

+6

main()方法のトップへ

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

:これらの2行を移動しますか?どのように伝えることができますか?後でpacket_ptで何をしましたか? – zmbq

+3

あなたの例は100%正しいので、 "うまくいきませんでした"というのはやや曖昧です... Cで 'malloc()'呼び出しの戻り値をタイプキャストしないでください。 –

+1

いいえ。 – asaelr

答えて

9

Cでは、コードを関数外にすることはできません。動作しませんでした何

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

私はもう一度チェックして、main()内にpacket_ptが1つしかないことを確認してください...他のアイデアは?ありがとう – greywolf274

+0

@ greywolf274私たちはより多くの情報が必要です - あなたの質問に私のコメントを参照してください。また、コードスニペットをコピーして貼り付けたのか、もう一度書き出しましたか?あなたがそれらをもう一度書き出した場合は、間違いが間違っていてもそれを訂正していないことに注意してください; –

+0

@ greywolf274私の答えを更新しました:) –

関連する問題