2016-04-26 113 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;  
} 

這是我的代碼的一部分,當我試圖編譯我越來越休耕錯誤:錯誤:「(」令牌隊列之前的期望標識符

是什麼它不對?

+4

歡迎棧溢出! [請參閱此討論,爲什麼不在'C'中投射'malloc()'和family的返回值。](http://stackoverflow.com/q/605845/2173917)。 –

+0

只是說''newPriorityQueue - >(queue + i) - > maxSize'是編寫有意義且易於理解的代碼的一種非常奇怪的方式。 –

+1

你可以做'(newPriorityQueue-> queue + i) - > maxSize = ...'。不漂亮,但應該工作。傳統的方式是'newPriorityQueue-> queue [i] .maxSize = ...'。 – EOF

回答

2

表達

newPriorityQueue->(queue+i) 

是錯誤給你的對象類型。由於運營商的優先級,首先對(queue+i)進行評估。但是,queue不是一個自變量。它是struct的成員。

因此,你需要使用:

(newPriorityQueue->queue+i) 

語法正確的路線是:

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

你可以使其更具可讀性使用:

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

謝謝,它的工作原理。 – MeNpHiS

相關問題