gpt4 book ai didi

c - 预期声明说明符错误,声明外部堆栈时

转载 作者:太空宇宙 更新时间:2023-11-03 23:36:47 25 4
gpt4 key购买 nike

共有三个文件:

测试.c

#include "stack.h"

stackT s2;
StackInit(&s2, 15);

int main(){
stackT s1;
StackInit(&s1, 10);

StackDestroy(&s1);
return 0;
}

堆栈.h

typedef char stackElementT;

typedef struct {
stackElementT *contents;
int top;
int maxSize;
} stackT;

void StackInit(stackT *stackP, int maxSize);
void StackDestroy(stackT *stackP);

堆栈.c

#include <stdio.h>
#include <stdlib.h>
#include "stack.h"

void StackInit(stackT *stackP, int maxSize)
{
stackElementT *newContents;
newContents = (stackElementT *)malloc(sizeof(stackElementT) * maxSize);

if (newContents == NULL) {
fprintf(stderr, "Insufficient memory to initialize stack.\n");
exit(1);
}
stackP->contents = newContents;
stackP->maxSize = maxSize;
stackP->top = -1;
}

void StackDestroy(stackT *stackP)
{
free(stackP->contents);
stackP->contents = NULL;
stackP->maxSize = 0;
stackP->top = -1;
}

我真的需要一个外部堆栈

stackT s2;
StackInit(&s2, 15);

在 test.c 中我试图声明它,但编译器给出了以下错误。

test.c:4:11: error: expected declaration specifiers or ‘...’ before ‘&’ token
StackInit(&s2, 15);
^
test.c:4:16: error: expected declaration specifiers or ‘...’ before numeric constant
StackInit(&s2, 15);
^~

这是我尝试过的:

  1. 我在 main 函数中声明了堆栈 s1,并且没有收到任何错误。

  2. 我在 test.c 中删除了 #include "stack.h" 并且我得到了外部堆栈 s2 的错误相同。

所以我的问题是:错误是什么?如何声明外部堆栈而不会出现任何错误?

最佳答案

你不能在 C 的顶层调用函数,你只能有声明和定义。将对 StackInit() 的调用移动到 main() 函数中。

#include "stack.h"

stackT s2;

int main(){
stackT s1;
StackInit(&s1, 10);
StackInit(&s2, 15);

StackDestroy(&s1);
StackDestroy(&s2);
return 0;
}

关于c - 预期声明说明符错误,声明外部堆栈时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58633006/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com