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日

悬赏问题

  • ¥20 java在应用程序里获取不到扬声器设备
  • ¥15 echarts动画效果的问题,请帮我添加一个动画。不要机器人回答。
  • ¥15 Attention is all you need 的代码运行
  • ¥15 一个服务器已经有一个系统了如果用usb再装一个系统,原来的系统会被覆盖掉吗
  • ¥15 使用esm_msa1_t12_100M_UR50S蛋白质语言模型进行零样本预测时,终端显示出了sequence handled的进度条,但是并不出结果就自动终止回到命令提示行了是怎么回事:
  • ¥15 前置放大电路与功率放大电路相连放大倍数出现问题
  • ¥80 部署运行web自动化项目
  • ¥15 腾讯云如何建立同一个项目中物模型之间的联系
  • ¥30 VMware 云桌面水印如何添加
  • ¥15 用ns3仿真出5G核心网网元