我使用的是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
我应该修复我的代码来解决这个问题?
答案 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 *
不起作用,因为您正在更改其类型,因此使用它的任何代码都没有正确执行。