【问题标题】:Error: expected specifier-qualifier-list before错误:预期的说明符限定符列表之前
【发布时间】:2012-08-28 07:44:30
【问题描述】:

我正在尝试编写代码来构建堆栈,但我遇到了对我来说没有意义的编译错误。这是我的stack.h

struct StackNode {

    void* previous;
    int   value;
};


struct Stack {

    StackNode* top;
};


Stack* new_stack () {

    StackNode stn = { NULL, 0 };
    Stack* st  = (Stack*) malloc(sizeof(Stack));
    st->top = NULL;
    return st;
}

还有我的main.c

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

#include "stack.h"

int main () {

    struct Stack* st = new_stack();

    return 0;

}

gcc 抛出这些错误:

make (在目录:/home/diego/temp/stack) gcc -g -O2 -std=c99 -c

main.c 在 main.c:4 中包含的文件中:编译失败。 stack.h:10:

错误:“StackNode”之前的预期说明符限定符列表

stack.h:14: 错误:预期为“=”、“,”、“;”、“asm”或“属性

在'*'标记main.c之前:在函数'main'中:main.c:8:警告:

函数‘new_stack’main.c:8的隐式声明:警告:

初始化从整数生成指针,不进行强制转换:*

[main.o] 错误 1

编辑:我发现了错误。我忘了在某些行中将struct 放在StackStackNode 之前。在这些行中始终使用struct 可以解决问题。

【问题讨论】:

    标签: c


    【解决方案1】:

    变化:

    struct Stack {
        StackNode* top;
    };
    

    到:

    struct Stack {
        struct StackNode* top;
    };
    

    在其他任何地方都使用StackNodeStack,并且前面没有struct。如果您不想指定struct,可以使用typedef

    【讨论】:

      猜你喜欢
      • 2013-02-06
      • 1970-01-01
      • 2011-09-25
      • 2011-07-02
      • 1970-01-01
      • 1970-01-01
      • 2021-09-03
      • 1970-01-01
      相关资源
      最近更新 更多