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

struct NODE {
    char* name;
    int val;
    struct NODE* next;
};
typedef struct NODE Node;

Node *head, *tail;
head = (Node*) malloc( sizeof( Node ) ); //line 21

我这样编译:

cc -g -c -o file.tab.o file.tab.c

我收到此错误消息:

file.y:21:1 warning: data definition has no type or storage class [enabled by default]
4

4 回答 4

29

它看起来像线

head = (Node*) malloc( sizeof( Node ) ); //line 21

main()函数之外。你不能这样做,因为你不能在函数之外执行代码。在全局范围内你唯一能做的就是声明变量。只需将其移入main()或任何其他功能,问题就会消失。

(PS:看看这个问题为什么你不应该 type-cast malloc

于 2013-09-19T23:08:31.870 回答
1

您需要将代码放入函数中:

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

struct NODE {
    char* name;
    int val;
    struct NODE* next;
};
typedef struct NODE Node;

main(){
    Node *head, *tail;
    head = (Node*) malloc( sizeof( Node ) ); //line 21
}

应该管用

于 2013-09-19T23:09:27.243 回答
1

malloc问题是当您不在函数内部执行时,您正在尝试调用。如果将其包装在main函数中,例如:

int main(int argc, char **argv)
{
    Node *head, *tail;
    head = (Node*) malloc( sizeof( Node ) );
    /* ... do other things ... */
    return 0;
}

......它工作得很好。GCC 的错误有点神秘,但问题基本上是你试图用不是常量的东西来初始化一个变量,这在函数之外是不可能的。

于 2013-09-19T23:09:27.613 回答
1

尝试将 malloc 和变量声明放在 main 函数中,并删除 malloc 上的强制转换。它应该如下所示:

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

int main(){

    struct NODE
    {
        char* name;
        int val;
        struct NODE* next;
    };

    typedef struct NODE Node;

    Node *head, *tail;
    head = malloc( sizeof(Node) ); //line 21
}
于 2013-09-19T23:13:16.437 回答