我有一些错误,但是我的主要问题是 - 在我的推送模块中我有一个不完整的类型'struct Stack',我该如何解决这个问题 -
struct Stack
{
Reservation list[10];
int rear;
int front;
};
void push(struct Stack*, int);
if(mainChoice == 5)
{
push(&stcks, item);
}//endif
void push(struct Stacks *stcks, int item)
{
if(!Full(stcks->rear))
{
stcks->list[stcks->rear] = item;
stcks->rear = stcks->rear + 1;
}//endif
}//end push
答案 0 :(得分:1)
错误:
您的结构定义似乎嵌套在您的main函数中。为什么?嵌套的类/结构几乎总是不好的做法。 "推"函数也是嵌套的,或者if块根本不在函数中,这将导致许多"无关的"错误(它不一定明显是导致问题的原因)。
当您声明的唯一结构是Stacks
时,您使用名为Stack
的类型。
你不能使用" struct"作为参数列表的一部分,它只是:void Foo(Stack * stck)
您调用名为Full
的函数,该函数似乎没有声明/正文。
在调用push()
时,您传递了&stcks
,这是一个甚至不在if块范围内的变量(我们可以看到)。
"不完整的定义"可能来自任何或所有这些。摆脱最明显的错误,看看你是否还有问题。
答案 1 :(得分:0)
更改
void push(struct Stacks *stcks, int item)
到
void push(struct Stack *stcks, int item)
要避免此错误,您可以使用typedef,例如:
typedef struct Stack Stack;
并在代码中使用Stack
,而不是struct Stack
。如果输入错误,编译器将引发错误,而不是假设您声明一个新的不完整类型。
(目前尚不清楚你的代码是C还是C ++;如果它是C ++,那么这个typedef是隐式完成的)