2017-02-03 3 views
0

Ich habe versucht, eine Liste mit 20 Tabellen zu erstellen. Jede Tabelle sollte folgendes haben: - eine Zahl in der Reihenfolge von 1 bis 20; - Anzahl der Sitze für jeden Tisch (für Tabelle 1-10 - 2 Sitze; Tabelle 11-15 - 4 Sitze; Tabelle 16-20 - 6 Sitze); - und es sollte anzeigen, ob es besetzt ist oder nicht.einfach verknüpfte Liste auf C - Warnung C4047

Ich brauche diese Liste in meinem Programm, diese Informationen enthalten, so dass ich später für Tabellen mit n Menge der Sitze aussehen kann, von frei belegte den Status der Tabelle zu ändern, usw.

ich etwas denken ist falsch in meinem Code. ich die folgende Warnung erhalten:

Warnung C4047: '=': 'table *' unterscheidet sich in Dereferenzierungsebenen von Tisch * '

Meine Vermutung ist, habe ich ein Neuling getan Fehler und ich habe die Online-Totorials auf Listen in C missverstanden. Jede Hilfe wäre sehr willkommen. Was ich bisher getan haben, ist:

#include<stdio.h> 


typedef struct tableList *table; 
struct table { 
    int numTable; // number of table 
    int numPeople; 
    int free; //0 - free; 1 - occupied 
    table *next; 
}; 



int main(void) { 
    struct table a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t ; 
    a.numTable = 1; a.numPeople = 2; a.free = 0; 
    b.numTable = 2; b.numPeople = 2; b.free = 0; 
    c.numTable = 3; c.numPeople = 2; c.free = 0; 
    d.numTable = 4; d.numPeople = 2; d.free = 0; 
    e.numTable = 5; e.numPeople = 2; e.free = 0; 
    f.numTable = 6; f.numPeople = 2; f.free = 0; 
    g.numTable = 7; g.numPeople = 2; g.free = 0; 
    h.numTable = 8; h.numPeople = 2; h.free = 0; 
    i.numTable = 9; i.numPeople = 2; i.free = 0; 
    j.numTable = 10; j.numPeople = 2; j.free = 0; 
    k.numTable = 11; k.numPeople = 4; k.free = 0; 
    l.numTable = 12; l.numPeople = 4; l.free = 0; 
    m.numTable = 13; m.numPeople = 4; m.free = 0; 
    n.numTable = 14; n.numPeople = 4; n.free = 0; 
    o.numTable = 15; o.numPeople = 4; o.free = 0; 
    p.numTable = 16; p.numPeople = 6; p.free = 0; 
    q.numTable = 17; q.numPeople = 6; q.free = 0; 
    r.numTable = 18; r.numPeople = 6; r.free = 0; 
    s.numTable = 19; s.numPeople = 6; s.free = 0; 
    t.numTable = 20; t.numPeople = 6; t.free = 0; 

    a.next = &b; 
    b.next = &c; 
    c.next = &d; 
    d.next = &e; 
    e.next = &f; 
    g.next = &g; 
    h.next = &i; 
    i.next = &j; 
    j.next = &k; 
    k.next = &l; 
    l.next = &m; 
    m.next = &n; 
    n.next = &o; 
    o.next = &p; 
    p.next = &q; 
    q.next = &r; 
    r.next = &s; 
    s.next = &t; 
    t.next = NULL; 

} 
+1

'typedef struct tableList * tabelle;' Was ist 'tableList'? – Marievi

+0

Sie haben 'struct tableList', wenn Sie den' table'-Typ-Alias ​​definieren. Und dann definieren Sie die 'table' Struktur. Wo ist die 'tableList' Struktur? Außerdem ist der Member 'next' wegen des Typalias ein Zeiger * auf einen Zeiger *. –

+0

tableList ist der Name meiner Liste mit Tabellen. – NewbieWantsToLearn

Antwort

1

Sie haben die Aussage:

typedef struct tableList *table; 

was bedeutet, dass table ist ein Zeiger auf struct tableList, also Zeiger next ist ein Zeiger auf table oder ein Zeiger auf ein Zeiger auf struct tableList, oder struct tableList **next, aber dann weisen Sie ihm Werte von struct table zu.

Ihren Code ändern:

struct table { 
    int numTable; // number of table 
    int numPeople; 
    int free; //0 - free; 1 - occupied 
    struct table *next; 
}; 
typedef struct table *tableList; 

Nun ist tableList ein Zeiger auf eine struct table zeigt, und daher können Sie es als ein Zeiger auf den ersten Knoten einer Liste verwenden.

Lesen Sie über Ihre Warnung here.


Im Allgemeinen um eine einzelne verkettete Liste zu erstellen, sollten Sie zunächst einen Knoten definieren, die wie folgt aussieht:

struct node { 
    ...      //whatever you want your node to contain 
    struct node *next; 
} 

und dann, wenn Sie möchten, einen Zeiger auf Ihren Knoten definieren:

typedef struct node *NodePtr; 

Dann können Sie dynamisch Speicher zuweisen einen Knoten zu erstellen:

NodePtr = malloc(sizeof(struct node)); 
if (NodePtr == NULL) 
    ... 

Jetzt NodePtr verweist auf eine struct node.

+0

Danke. Das habe ich jetzt gemacht. Ja, ich habe die Warnung gegoogelt, aber alles war in einer fremden Sprache. – NewbieWantsToLearn

+0

@NewbieWantsToLearn Ich bin glücklich, wenn ich geholfen habe. Wenn Ihr Problem gelöst ist, können Sie die Antwort akzeptieren, sodass die Frage als gelöst angezeigt wird. – Marievi

Verwandte Themen