【问题标题】:Incompatible Types With User Created Structures [duplicate]与用户创建的结构不兼容的类型 [重复]
【发布时间】:2012-10-22 18:06:40
【问题描述】:

可能重复:
“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 将是空的,除非有到另一个顶点的连接,这是 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
    }
}

我认为一旦在我的结构中声明,我就可以使用这样的赋值了吗?

【问题讨论】:

  • 尝试typedef struct adjEdge{.....}Edge;之类的东西,然后在其他结构中你应该使用Edge *adj;之类的东西
  • 我在想这就是我所做的......?
  • This 我猜可能会有所帮助...
  • @ZAX:你在做typedef struct { ... } adjEdge。建议是typedef struct adjEdge { ... } adjEdge
  • @sharth 感谢您的澄清!它成功了!

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


【解决方案1】:

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

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

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

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-10
    • 1970-01-01
    • 1970-01-01
    • 2020-01-16
    • 1970-01-01
    • 1970-01-01
    • 2021-06-27
    • 1970-01-01
    相关资源
    最近更新 更多