나는이에서 C로 기본 스택을 사용하는 프로그램을 만드는 오전 나는 제목에 정의 된 두 개의 구조를 가지고 :C 데이터 구조 오류
- 구조라는 문자열 노드 및 이전에 대한 포인터를 구성원으로 노드.
구성원으로 마지막 노드에 대한 포인터가있는 스택 구조체. 여기
내 헤더 파일에 이러한 구조의 정의를 다음과 같습니다CreateStack :이 함수는 스택을 생성합니다 (해당
#include <stdio.h> #include <stdlib.h> typedef struct Node { const char* string; struct Node *prev; }; typedef struct Stack { size_t sizeOfStack; size_t sizeOfElem; struct Node *last; };
한 가지 방법 나 오류를주는 것은 CreateStack()이다 생성자).
(가) 이름 : CreateStack
(B) 반환 유형 : 힙에 할당 된 스택에 대한 포인터. 여기
내 구현Stack* CreateStack() {
Stack* stack = malloc(sizeof(*stack));
if (stack == NULL) {
return NULL;
}//end of if
stack->sizeOfElem = 0;
stack->sizeOfStack = 0;
stack->last = NULL;
return stack;
}//end of CreateStack
하지만 컴파일러는 이것을 침된다
오류 : '{일명 스택 구조체} 스택'라는 이름의 멤버가없는 '마지막' stack-> 마지막으로 = 마디;
오류 : 'Stack {aka struct stack}'에는 'last'라는 멤버가 없습니다. node-> prev = stack-> last;
오류 : 'Stack {aka struct stack}'에 'last'라는 멤버가 없습니다. Node * node = stack-> last;
누군가가 여기에서 문제를 지적 할 수 있다면 크게 감사하겠습니다. 나는 왜 그것이 마지막 것이 아니라는 것을 말하는 지 혼란 스럽다. 그러나 다른 구조에서 같은 방식으로 미리 정의 된 것은 깃발을 올리지 않는다. 감사.
귀하의 컴파일러 오류는 보여 코드에 있지 않습니다. 귀하의 typedef는 불완전합니다. – aschepler
"디버깅 도움말을 찾는 질문 ("이 코드가 작동하지 않는 이유는 무엇입니까? ")에는 원하는 동작, 특정 문제 또는 오류 및 질문 자체에서이를 재현하는 데 필요한 가장 짧은 코드가 포함되어야합니다. 참조 : [** 최소, 완전하고 검증 가능한 예제를 만드는 방법 **] (http://stackoverflow.com/help/mcve). " –
@aschepler 그렇습니다.이 코드는 긴 코드입니다.이 오류는 구조체를 사용하는 메서드에만 해당되지 않으므로 구조체에 오류가 있다고 가정합니다. 구조 자체를 제공했습니다. 모든 오류는 "마지막"을 존재하지 않는 것으로 참조합니다. –