为什么我会收到此错误:“数据定义没有类型或存储类”?

时间:2013-09-19 22:49:39

标签: c pointers struct bison cc

#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 个答案:

答案 0 :(得分:21)

看起来像

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

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

(PS:看看this question关于为什么你不应该打字malloc

答案 1 :(得分: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
}

应该有效

答案 2 :(得分:1)

问题是当你没有在函数内部执行时,你试图调用malloc。如果将其包装在main函数中,例如:

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

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

答案 3 :(得分: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
}