目标:遍历Heap
结构中的vertices
内存块。
错误:我在尝试访问vertices
时得到expected unqualified-id before ‘(’ token
。此外,‘vertices’ was not declared in this scope
。
标题:
typedef struct Heap *PriorityQueue_t;
typedef struct HeapItem *PriorityItem_t;
PriorityQueue_t Init(int max_capacity, int source_vertex);
实施:
#include "heap.h"
#include <stdlib.h>
#include <limits.h>
struct Heap
{
int size;
PriorityItem_t vertices;
};
struct HeapItem
{
int id;
int distance;
};
PriorityQueue_t Init(int max_capacity, int source_vertex)
{
PriorityQueue_t Q;
Q = (PriorityQueue_t)malloc(sizeof(PriorityQueue_t));
Q->vertices = (PriorityItem_t)malloc(sizeof(PriorityItem_t)*max_capacity);
Q->size = max_capacity;
int i;
for(i = 0; i < Q->size; i++)
{
Q->(vertices + i)->id = i; //Errors on this line.
Q->(vertices + i)->distance = INT_MAX;
}
Q->(vertices + source_vertex)->distance = 0;
return Q;
}
您将parens放错了位置。试试这个:
(Q->vertices + i)->id = i; //Errors on this line.
(Q->vertices + i)->distance = INT_MAX;
}
(Q->vertices + source_vertex)->distance = 0;
Q->(vertices + i)->id = i; //Errors on this line.
Q->(vertices + i)->distance = INT_MAX;
Q->(vertices + source_vertex)->distance = 0;
你不能那样做。。。
Q->vertices[i].id = i;
(Q->vertices + i)->distance = INT_MAX;
(*(Q->vertices + source_vertex)).distance = 0; // Not sensible, but legal
您可以通过使用普通索引和删除强制转换来避免使用许多括号:
PriorityQueue_t Init(int max_capacity, int source_vertex)
{
PriorityQueue_t Q;
Q = malloc(sizeof *Q);
Q->vertices = malloc(max_capacity * sizeof *Q->vertices);
Q->size = max_capacity;
int i;
for(i = 0; i < Q->size; i++)
{
Q->vertices[i].id = i;
Q->vertices[i].distance = INT_MAX;
}
// maybe add next line:
// assert (source_vertex >=0 && source_vertex < Q->size);
Q->vertices[source_vertex].distance = 0;
return Q;
}