使用不完整类型无效 - 'struct Stacks'

时间:2014-04-01 21:33:07

标签: c++

我有一些错误,但是我的主要问题是 - 在我的推送模块中我有一个不完整的类型'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

2 个答案:

答案 0 :(得分:1)

错误:

  1. 您的结构定义似乎嵌套在您的main函数中。为什么?嵌套的类/结构几乎总是不好的做法。 "推"函数也是嵌套的,或者if块根本不在函数中,这将导致许多"无关的"错误(它不一定明显是导致问题的原因)。

  2. 当您声明的唯一结构是Stacks时,您使用名为Stack的类型。

  3. 你不能使用" struct"作为参数列表的一部分,它只是:void Foo(Stack * stck)

  4. 您调用名为Full的函数,该函数似乎没有声明/正文。

  5. 在调用push()时,您传递了&stcks,这是一个甚至不在if块范围内的变量(我们可以看到)。

  6. "不完整的定义"可能来自任何或所有这些。摆脱最明显的错误,看看你是否还有问题。

答案 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是隐式完成的)