【问题标题】:struct member is not found未找到结构成员
【发布时间】:2013-11-21 00:06:10
【问题描述】:

我有以下结构:

typedef struct vertex_tag{
    int visited = 0;
    int weight = FLT_MAX;
    int prev;
}vertex_t;

它具有上述三个成员。

我这样分配顶点:

vertex_t * vertex[G->vertices];
    for(i=0; i < G->vertices; i++)
    {
        vertex[i] = (vertex_t*)malloc(sizeof(vertex_t));
    }

所以我从结构中创建了一个矩阵。然后我在我创建的整个函数中调用它们,如下所示:

vertex[i]->visited
vertex[i]->weight
vertex[i]->prev

我不断收到以下错误:

error: ‘vertex_t’ has no member named ‘visited’
error: ‘vertex_t’ has no member named ‘weight’
error: ‘vertex_t’ has no member named ‘prev’

谁能帮我理解为什么我不能这样做?

【问题讨论】:

  • 该结构定义无效;成员不能这样初始化。
  • 所以我不能让它们等于 0 和 FLT_MAX?
  • @user081608:你可以,但只有在你实际创建 vertex_t 之后:vertex_t v; v.visited = 0; v.weight = INT_MAX;
  • 好的,我可以在我分配它的 for 循环之后执行它吗?
  • @user081608:如果每个vertex[i] 只分配一个元素,为什么vertex 不只是vertex_t[G-&gt;vertices]? (vertex_t vertex[G-&gt;vertices]。顺便问一下,Dijkstra?

标签: c data-structures struct compiler-errors


【解决方案1】:

好的,我可以在我分配它的 for 循环之后执行它吗?

你会在循环中做得更好

    vertex_t *vertex[G->vertices];
    for (i = 0; i < G->vertices; i++)
    {
        vertex[i] = malloc(sizeof(vertex_t));
        vertex[i]->visited = 0;
        vertex[i]->weight = FLT_MAX;
    }

或者按照 Zeta 的建议:

    vertex_t vertex[G->vertices];
    for (i = 0; i < G->vertices; i++)
    {
        vertex[i].visited = 0;
        vertex[i].weight = FLT_MAX;
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-24
    • 2011-08-29
    • 1970-01-01
    • 2012-03-08
    • 2017-09-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多