2016-04-26 20 views
-2
struct nodePatient { 
    struct Patient * patient; 
    struct nodePatient * next; 
}; 

struct linkedQueue { 
    struct nodePatient * firstNode; 
    struct nodePatient * lastNode; 
    unsigned size; 
    unsigned maxSize; 
}; 


struct PriorityQueue { 
    struct linkedQueue * queue; 
    int size; 
    unsigned minPriorityValue; 
}; 



struct PriorityQueue * createPriorityQueue(unsigned minPriorityValue) { 
    struct PriorityQueue * newPriorityQueue = (struct PriorityQueue*) malloc (sizeof (struct PriorityQueue)); 
    newPriorityQueue->queue = (struct linkedQueue*) calloc (minPriorityValue+1, sizeof (struct linkedQueue)); 
    int i; 

    newPriorityQueue->minPriorityValue = minPriorityValue; 
    for(i = 0; i < minPriorityValue; i++) { 
     newPriorityQueue->(queue+i)->maxSize = UNLIMITED_SIZE; 
     newPriorityQueue->(queue+i)->size = 0; 
     newPriorityQueue->(queue+i)->firstNode = NULL; 
     newPriorityQueue->(queue+i)->lastNode = NULL; 
    } 
    return newPriorityQueue;  
} 

Dies ist ein Teil meines Codes und wenn ich zu kompilieren versuche ich die Brache Fehler bin immer:Fehler: erwartete Kennung vor ‚(‘ Token-Warteschlange

Was ist es falsch daran?

+4

Willkommen bei Stack:

(newPriorityQueue->queue+i)->maxSize = UNLIMITED_SIZE; 

Man könnte es durch die Verwendung leichter lesbar machen Überlauf! [Bitte lesen Sie die Diskussion darüber, warum der Rückgabewert von 'malloc()' und die Familie in 'C' nicht umgewandelt werden soll.] (Http://stackoverflow.com/q/605845/2173917). –

+0

Nur zu sagen, 'newPriorityQueue -> (Warteschlange + i) -> maxSize' ist eine ziemlich seltsame Art, einen sinnvollen und verständlichen Code zu schreiben. –

+1

Sie könnten '(newPriorityQueue-> queue + i) -> maxSize = ...'. Nicht schön, aber sollte funktionieren. Der traditionelle Weg wäre 'newPriorityQueue-> queue [i] .maxSize = ...'. – EOF

Antwort

2

Der Ausdruck

newPriorityQueue->(queue+i) 

falsch angegeben ist Ihr Objekt Arten. Aufgrund der Operator-Priorität wird (queue+i) zuerst ausgewertet. queue ist jedoch keine unabhängige Variable. Es ist ein Mitglied der struct.

Daher müssen Sie verwenden:

(newPriorityQueue->queue+i) 

eine syntaktisch korrekte Linie wäre:

newPriorityQueue->queue[i].maxSize = UNLIMITED_SIZE; 
+0

Danke, es funktioniert. – MeNpHiS

Verwandte Themen