私は3つのファイルを持っています:stack2.h、stack2.c、main.cリンクされたリストを使用してスタックを実装するための2つの警告コード
stack2.hはこれを含んでいます
は/* Define linked list structure */
typedef struct node {
int val;
struct Node *next;
} Node, *pNode;
/* Define stack structure */
typedef struct StackType {
pNode top;
} Stack, *pStack;
/* Declare functions */
pStack InitStack();
int IsEmpty(pStack pS);
int Pop(pStack pS);
void Push(pStack pS, int val);
void KillStack(pStack pS);
stack2.cは
pStack InitStack() {
/* Declare variables */
pStack pS = (pStack)malloc(sizeof(Stack));
/* Set first node to NULL */
pS -> top = NULL;
/* Return pointer to stack */
return pS;
}
int IsEmpty(pStack pS) {
return (pS->top == NULL);
}
int Pop(pStack pS) {
/* Declare variables */
int ret = 0;
pNode temp = NULL;
/* Check if stack is empty */
if(IsEmpty(pS)) {
printf("[ERROR] Pop operation on an empty stack.\n");
exit(1);
}
/* Find return value (last in) */
ret = pS->top->val;
temp = pS->top;
/* Delete and kill node */
pS->top = pS->top->next;
free(temp);
/* Return */
return ret;
}
void Push(pStack pS, int val) {
/* Allocate memory for new node */
pNode nnew = (pNode)malloc(sizeof(Node));
/* Initiate node */
nnew->next = pS->top;
nnew->val = val;
/* Set structure's top to new node */
pS -> top = nnew;
}
のmain.cに何が含まれているかと、私はしません負担となりますが含まれています。本質的には、正しいライブラリとファイルを含み、単純にいくつかの値をプッシュしてポップします。私はこれらの警告を得る:この2行の
assignment from incompatible pointer types
:
nnew->next = pS->top;
pS->top = pS->top->next;
私は少し混乱しています。 nnewはノードへのポインタなので、nnew-> nextはノードへのポインタです。 pSはスタックへのポインタなので、pS-> topもノードへのポインタです。これらがどのように互換性がないのかわかりません!
ここでは何が起こっていますか?ありがとう!
エラーを生成するFILEとLINE NUMBERを指定する必要があります。 – abelenky
'struct node'と' struct Node'は同じものではありません。 – geekosaur
@geekosaur:2つのコピーアンドペーストとその説明があり、そこにはきちんとした答えがあります... – sarnold