2016-07-21 1 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 불완전한 유형은 허용되지 않습니다"

그래서, 내가 변경 한 코드 "구조체 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 *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; 

당신은 그것의 유형을 변경하고 있기 때문에 작동하지 않습니다 struct mmem *struct mmem에서 mmem_ptr의 정의를 변경, 그래서 그것을 사용하는 코드는 그렇게 제대로 수행되지 않은 : 그래서 정의를 교환합니다.

+0

그것은 작동합니다. 정말 고맙습니다 !!! 나는 너무 어리 석다. –