2016-07-21 717 views
1

私はCCS v6を使用していますが、構造文法に関するエラーがありました。C式に構造体または共用体の型へのポインタが必要です

typedef struct _mem_ptr_t 
{ 
    struct _mem_ptr_t *next; ///< Next pointer in memory 
    uint8 alloc;    ///< Allocated 
    struct mmem mmem_ptr;  ///< The actual pointer to the pointer to the mem block 
} mem_ptr_t; 

struct mmem { 
    struct mmem *next; 
    unsigned int size; 
    void *ptr; 
}; 

上記のコードは元の状態です。しかし、エラーがありました。 "#71不完全なタイプが許可されていません"

だから、私は変わっていたコード "のstruct MMEM mmem_ptr;" - > "構造体MMEM * mmem_ptr;" 私がコンパイルしたときは、その部分が渡されました。

しかし、別の部分でエラーが発生しました。

if ((mem_ptr = mac_scan_alloc()) != NULL) { 
     memcpy(&SCAN_ENTRY(mem_ptr)->oord_addr, src_addr, sizeof(address_t)); 
     SCAN_ENTRY(mem_ptr)->superfrm_spec = superframe_spec; 
     SCAN_ENTRY(mem_ptr)->coord_pan_id = src_pan_id; 
     SCAN_ENTRY(mem_ptr)->channel = channel; 
    } 
#define SCAN_ENTRY(m) ((pan_descr_t *)MMEM_PTR(&m->mmem_ptr)) 

にエラーが発生しました

を「#133式はポインタ・ツー・構造体・オア・ユニオン型でなければなりません」私はすでにこの問題についての関連質問を見ていました。私は上記の問題を解決するために理解できませんでした。 Expression must have pointer to struct or union error

この問題を解決するにはどうすればよいですか?

+0

'SCAN_ENTRY'の定義はありますか? –

+0

@EugeneSh .:すでに掲載されています。とにかく、 '#define SCAN_ENTRY(m)((pan_descr_t *)MMEM_PTR(&m-> mmem_ptr))'はおそらく過度のアンパサンドに苦しんでいるでしょう。 – EOF

+1

右ですが、なぜ*後*使用されていますか? –

答えて

3

struct _mem_ptr_tは、それが定義される前にstruct mmemを使用します。あなたがそのタイプを変更しているので、struct mmem *からstruct mmemからmmem_ptrの定義を変更する

struct mmem { 
    struct mmem *next; 
    unsigned int size; 
    void *ptr; 
}; 

typedef struct _mem_ptr_t 
{ 
    struct _mem_ptr_t *next; ///< Next pointer in memory 
    uint8 alloc;    ///< Allocated 
    struct mmem mmem_ptr;  ///< The actual pointer to the pointer to the mem block 
} mem_ptr_t; 

は動作しませんので、それを使って任意のコードが適切にそうされていません:だから定義を入れ替えます。

+0

それは動作します。どうもありがとうございます !!!私はとても愚かだった –

関連する問題