나는 C에서 녹슨 것이지만, typedef
을 사용하여 적절한 사용법을 이해하고, 구현 파일에서 실제 구조체의 구조를 정의하고, 그런 다음 세 번째 파일에서 구조체를 사용합니다. qnode_t
는 큐의 구현 파일 내에서 사용되는 구조체가typedef struct in header와 dereference 포인터가 불완전한 타입으로
typedef struct queue
{
int count;
qnode_t *head;
qnode_t *tail;
} queue_t;
:
나는 같은 정의 된 유형을 가진 큐 데이터 구조를 썼다. 내 헤더 내에서나는이 있습니다
typedef struct queue queue_t;
이 같은 큐의 길이를 얻기 위해 시도하고있어 다른 파일 내에서이 queue_t
유형을 사용 : 그 라인에
queue_t *work_queue;
...
int length = work_queue->count;
그러나 어디에서 카운트를 찾고 있는데 컴파일러 오류가 발생합니까?
dereferencing pointer to incomplete type
C에서 타입을 적절히 정의하는 방법에 대한 많은 연구를 해왔지만 많은 예제가 다른 리소스와 충돌하거나 너무 단순 해 실제 사용에 옮겨지기 때문에 명확성 대신 점점 더 혼란스러워하고 있다고 생각합니다. .
구조체 내의 '개수'변수가 정의되어 있지 않기 때문에이 오류가 발생합니까? 이 경우, 다음 구현 및 헤더 구조체를 모두 정의 할 수 있습니까? 그렇다면 헤더는 머리 & 꼬리가 숨겨 지거나/개인이어야하므로 정의 된 카운트 변수 만 가질 수 있습니까? (나는 OOP가 그리워) queue_t*
을 취하고 그 길이를 size_t
으로 돌려주는 또 다른 함수를 만들어야할까요?
오류 메시지를 SO로 검색하면 이전 질문 목록을 많이 볼 수 있습니다.많은 실수로 인해 발생할 수 있습니다. 어떤 실수를했는지 확실하지 않습니다. 이 질문을 읽으면 오류를 해결하는 단어를 찾을 것입니다. – Barmar
@Barmar 나는 그 중 몇 가지를 읽었지 만 불행히도 내가 잘못한 것을 정확히 파악하지 못했기 때문에 내 자신의 글을 올린 이유에 대해 많은 후속/추가 질문을했습니다. – JNYRanger