Waarom krijg ik deze foutmelding: “gegevensdefinitie heeft geen type of opslagklasse”?

En ik compileer als volgt:

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

Ik krijg deze foutmelding:

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

Antwoord 1, autoriteit 100%

Het lijkt op de lijn

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

bevindt zich buiten de functie main(). Dat kun je niet doen, omdat je geen code buiten functies kunt uitvoeren. Het enige dat u met globale scope kunt doen, is variabelen declareren.Verplaats het gewoon naar de main()of een andere functie, en het probleem zou moeten verdwijnen.

(PS: Bekijk deze vraagover waarom je moet malloc)

. niet typen


Antwoord 2, autoriteit 4%

Probeer de malloc- en variabeledeclaraties in een hoofdfunctie te plaatsen en verwijder de cast op malloc. Het zou er zo uit moeten zien:

#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
}

Antwoord 3, autoriteit 4%

Het probleem is dat u mallocprobeert aan te roepen wanneer u niet binnen een functie uitvoert. Als je dat in een main-functie plaatst, bijvoorbeeld:

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

… het werkt prima. GCC’s fout is een beetje cryptisch, maar het probleem is eigenlijk dat je probeert een variabele te initialiseren met iets dat niet constant is, wat onmogelijk is buiten een functie.


Antwoord 4, Autoriteit 4%

U moet uw code in een functie plaatsen:

#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
}

zou moeten werken

Other episodes