2016-04-26 85 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

相关问题