2016-05-15 2 views
0

Zu Beginn mit Struktur, mein Code so aussah, und ich den Code kompiliert mit gccFehler trat auf, wenn in der Sprache C-Programmierung

struct pcb{ 
    int pid;   /* process id */ 
    int ppid;   /* parent process id */ 
    int prio;   /* priority */ 
}; 
/* process node */ 
struct pnode{ 
    pcb *node; 
    pnode *sub; 
    pnode *brother; 
    pnode *next; 
}; 

Und es sendet die Nachricht, dass unbekannte Typname ‚pcb‘. Dann ändere ich den Code entsprechend dem, was ich im Internet gefunden habe, und mein überarbeiteter Code ist wie folgt.

typedef struct pcb{ 
    int pid;   /* process id */ 
    int ppid;   /* parent process id */ 
    int prio;   /* priority */ 
    int state;   /* state */ 
    int lasttime;  /* last execute time */ 
    int tottime;  /* totle execute time */ 
} pcb; 
/* process node */ 
typedef struct pnode{ 
    pcb *node; 
    pnode *sub; 
    pnode *brother; 
    pnode *next; 
} pnode; 

Aber neue Fehler sind aufgetreten; Der Compiler hat mir die Nachricht über den unbekannten Typ 'pnode' geschickt. Ich kann meine Strukturvariable nicht verwenden, wenn ich eine Struktur definiere. Bitte gib mir ein paar Tipps.

+1

dieser http://stackoverflow.com/q/588623/694576 Verwandte. – alk

Antwort

1

Das Schlüsselwort struct wird in C benötigt, um eine Variable mit Strukturtyp zu deklarieren.

struct pcb{ 
    int pid;   /* process id */ 
    int ppid;   /* parent process id */ 
    int prio;   /* priority */ 
}; 
/* process node */ 
struct pnode{ 
    struct pcb *node; 
    struct pnode *sub; 
    struct pnode *brother; 
    struct pnode *next; 
}; 

können Sie verwenden Vorwärtsdeklaration viele struct Schreiben zu vermeiden.

typedef struct pcb{ 
    int pid;   /* process id */ 
    int ppid;   /* parent process id */ 
    int prio;   /* priority */ 
    int state;   /* state */ 
    int lasttime;  /* last execute time */ 
    int tottime;  /* totle execute time */ 
} pcb; 
/* process node */ 
typedef struct pnode pnode; 
struct pnode{ 
    pcb *node; 
    pnode *sub; 
    pnode *brother; 
    pnode *next; 
}; 
1

Sie sollten

schreiben
struct pcb{ 
    int pid;   /* process id */ 
    int ppid;   /* parent process id */ 
    int prio;   /* priority */ 
}; 
/* process node */ 
struct pnode{ 
    struct pcb *node; 
    struct pnode *sub; 
    struct pnode *brother; 
    struct pnode *next; 
}; 

Oder

struct pcb; 
typedef struct pcb pcb_t; 
struct pnode; 
typedef struct pnode pnode_t; 

struct pcb{ 
    int pid;   /* process id */ 
    int ppid;   /* parent process id */ 
    int prio;   /* priority */ 
}; 
/* process node */ 
struct pnode{ 
    pcb_t *node; 
    pnode_t *sub; 
    pnode_t *brother; 
    pnode_t *next; 
}; 
+0

Im zweiten Beispiel wäre es ausreichend, die zwei 'typedef'-Zeilen zu verwenden; Die Zeilen "struct xyz;" werden nicht benötigt (obwohl sie keinen anderen Schaden verursachen als die Anzahl der zu verarbeitenden Zeilen). –

1

Sie die uasge of the keyword 'typedef' verweisen kann, wird die Typdefinition nur verwendet werden dürfen, nachdem typedef struct pnode pnode; definiert wurde.

Sie haben also zwei Möglichkeiten, um den Fehler zu beheben.

  1. Definieren Sie typedef struct pnode pnode;, bevor Sie den Typ pnode *sub; verwenden.
  2. Ändern Sie bitte Ihre typedef struct pnode zu: wenn kein Duplikat es

    typedef struct pnode{ pcb *node; struct pnode *sub;
    struct pnode *brother; struct pnode *next; } pnode;

Verwandte Themen