用户创建的结构不兼容的类型

时间:2012-11-02 04:08:05

标签: c pointers data-structures error-handling typedef

  

可能重复:
  “Assignment from incompatible pointer type” warning

我有两个结构,一个构建另一个结构。我希望一起使用它们来创建有向加权图的邻接列表。

以下是我的结构:

typedef struct{
        int v;
        int edgeWeight;
        struct adjEdge * next;
}adjEdge;

typedef struct{
        int v;
        int weight;
        struct  adjEdge *adj;
}vertex;

所以基本上顶点adj将为null,除非与另一个顶点有连接,这是adjEdge结构函数。

我的问题是,当我将一个adjEdge分配给顶点结构时,我收到一个错误:

bfs.c:75: warning: assignment from incompatible pointer type 

以下是代码的一部分。查看它以查看错误实际被抛出的位置

while((fscanf(fp, "%d %d %d", &u, &v, &w)) != EOF)
{
    vertexArray[u-1].v = u;


    adjEdge * newEdge;
    newEdge->v = v;
    newEdge->edgeWeight = w;
    newEdge->next = NULL;

    if(vertexArray[u-1].adj = NULL)
    {
        vertexArray[u-1].adj = newEdge; //error
    }
    else
    {
        adjEdge * traverse = vertexArray[u-1].adj; //error
        while(traverse->next != NULL)
        {
            traverse = traverse->next; //error
        }
        traverse->next = newEdge;  //error
    }
}

我以为曾经在我的结构中宣称我可以利用这样的作业吗?

1 个答案:

答案 0 :(得分:2)

问题在于您定义结构的方式。按如下方式定义它们并删除警告。

typedef struct adjEdge_{
        int v;
        int edgeWeight;
        struct adjEdge_ * next;
}adjEdge;

typedef struct vertex_{
        int v;
        int weight;
        struct  adjEdge_ *adj;
}vertex;

希望这有帮助!

相关问题