C表达式必须具有指向struct或union类型的指针

时间:2016-07-21 18:51:28

标签: c pointers structure

我使用的是CCS v6,结果语法错误。

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;
};

上面的代码是原始状态。但是有一个错误。 &#34;不允许#71不完整类型&#34;

所以,我改变了代码&#34; struct mmem mmem_ptr; &#34; - &GT; &#34; struct mmem * mmem_ptr; &#34; 当我编译时,那部分通过了。

但另一部分发生了错误。

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

出现错误&#34;#133表达式必须具有指向结构或联合类型的指针&#34;

我已经看过关于这个问题的相关问题了。但我无法理解解决上述问题。 Expression must have pointer to struct or union error

我应该修复我的代码来解决这个问题?

1 个答案:

答案 0 :(得分:3)

struct _mem_ptr_t在定义之前使用struct mmem。所以交换定义:

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;

mmem_ptr的定义从struct mmem更改为struct mmem *不起作用,因为您正在更改其类型,因此使用它的任何代码都没有正确执行。