m0_61431543 2022-06-08 09:23 采纳率: 50%
浏览 319
已结题

invalid conversion from 'void*' to 'EDGENODE* {aka gnode*}' [-fpermissive]报错

#include"stdio.h"
#include<stdlib.h>
//#include "malloc.h"
#define MAXLEN 40 //有向图顶点最大数目
#define VEXTYPE int //有向图顶点类型
typedef struct gnode //每条弧对应一个结点
{int adjvex;
struct gnode *next;
}EDGENODE;
typedef struct
{int id; //顶点的入度
VEXTYPE vertex; //顶点的信息
EDGENODE *link; //每个顶点对应一单链表
}VEXNODE;
typedef struct
{VEXNODE adjlist[MAXLEN];//邻接链表
int vexnum,arcnum;//有向图的顶点数目、弧数目
int kind;//有向图的kind=1
}ADJGRAPH;
ADJGRAPH creat_adjgrapg()
{
EDGENODE *p;
int i,s,d;
ADJGRAPH adjg;
adjg.kind=1;
printf("请输入顶点数和边数:");
scanf("%d,%d", &s, &d);
adjg.vexnum = s;
adjg.arcnum = d;
for(i = 0; i < adjg.vexnum;i++)//邻接链表顶点初始化
{printf("第%d个顶点信息:",i+1);
getchar();
scanf("%d", &adjg.adjlist[i].vertex);
adjg.adjlist[i].link = NULL;
adjg.adjlist[i].id = 0; }
for(i = 0; i < adjg.arcnum; i++)//每条弧的信息初始化
{printf("第 %d 条边的起始顶点编号和终止顶点编号:", i + 1);
scanf("%d,%d",&s,&d);
while(s < 1 || s > adjg.vexnum || d<1 || d> adjg.vexnum)
{printf("编号超出范围,重新输入:");
scanf("%d,%d", &s, &d);}
s --;
d --;
p=malloc(sizeof(EDGENODE));//每条弧对应生成一个结点
p->adjvex = d;
p->next = adjg.adjlist[s].link;//结点插入对应的链表中
adjg.adjlist[s].link = p;
adjg.adjlist[d].id++;//弧对应的终端顶点入度加1
}
return adjg;
}
void topsort(ADJGRAPH ag)
//拓扑排序过程
{
int i, j, k, m, n, top;
EDGENODE *p;
n = ag.vexnum;
top = -1;
for(i = 0; i < n; i++)//将入度为0的顶点压入一个链线,top指向栈顶结点
if(ag.adjlist[i].id==0)//这是一个利用id为0的域链接起来的寄生线
{ag.adjlist[i].id = top;
top = i; }
m = 0;
while(top != -1)//当栈不空时,进行拓扑排序
{j = top;
top = ag.adjlist[top].id;
printf("%3d", ag.adjlist[j].vertex); //输出栈顶元素并删除栈顶元素
m++;
p = ag.adjlist[j].link;
while(p != NULL)
{k = p->adjvex;
ag.adjlist[k].id--; //删除相关的弧
if(ag.adjlist[k].id == 0)//出现新的入度为0的顶点,将其入栈
{ag.adjlist[k].id = top;
top = k;}
p = p->next; }
}
if(m < n)
printf("\n网中有环!\n");//拓扑排序过程中输出的顶点数<有向图中的顶点数
}
main()
{
ADJGRAPH ag;
ag = creat_adjgraph();
topsort(ag);

}

44 27 C:\Users\lenovo\Desktop\c++\拓扑排序.cpp [Error] invalid conversion from 'void*' to 'EDGENODE* {aka gnode*}' [-fpermissive]
84 23 C:\Users\lenovo\Desktop\c++\拓扑排序.cpp [Error] 'creat_adjgraph' was not declared in this scope
以上两点一直报错 尝试malloc前加(int *)还是报错

img

  • 写回答

1条回答 默认 最新

  • 浪客 2022-06-10 16:13
    关注

    函数名声明的是 ADJGRAPH creat_adjgrapg()
    函数中的p=malloc(sizeof(EDGENODE));改为p=(EDGENODE *)malloc(sizeof(EDGENODE));

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 6月18日
  • 已采纳回答 6月10日
  • 创建了问题 6月8日

悬赏问题

  • ¥15 远程桌面文档内容复制粘贴,格式会变化
  • ¥15 关于#java#的问题:找一份能快速看完mooc视频的代码
  • ¥15 这种微信登录授权 谁可以做啊
  • ¥15 请问我该如何添加自己的数据去运行蚁群算法代码
  • ¥20 用HslCommunication 连接欧姆龙 plc有时会连接失败。报异常为“未知错误”
  • ¥15 网络设备配置与管理这个该怎么弄
  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题