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 불완전한 유형은 허용되지 않습니다"
그래서, 내가 변경 한 코드 "구조체 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
이 문제를 해결하려면 코드를 수정해야합니까?
'SCAN_ENTRY'의 정의? –
@EugeneSh .: 이미 게시되었습니다. 어쨌든,'#define SCAN_ENTRY (m) ((pan_descr_t *) MMEM_PTR (& m-> mmem_ptr))'은 아마 과다한 앰퍼샌드를 겪을 것이다. – EOF
맞아. 근데 왜 * 사용 된거야? –