#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]
答案 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
}