多捞啊 发表于 2023-4-17 22:06:34

指针指向结构体数组,结构体数组调用其内部数据编译失(问题代码已用红色标注)....

typedef struct _EdgeNode{
    int weight,adjacency;
    struct Edge* next;
}Edge;

typedef struct _HeadNode{
    VertexType name;
    Edge* first;
}Head;

typedef struct _ALGraph{
    int vertices;
    int edges;
    Head vertex;
}ALGraph;

void Creat_UnALGraph_UnWeighted(AMGraph* G){
    //初始化边和顶点个数
    printf("请输入边数和顶点数\n");
    getchar();
    scanf("%d",G -> vertices);
    scanf("%d",G -> edges);

    for(int i = 0;i < G -> vertices;i++){
      printf("请输入每个顶点的名字\n");
      getchar();
      scanf("%c",&G -> vertex.name);
      G -> vertex.first;
    }
}

多捞啊 发表于 2023-4-17 22:08:15

scanf("%c",&G -> vertex.name)
这一段代码编译不通过,跪求各位大佬答疑{:5_100:}

sfqxx 发表于 2023-4-17 22:15:19

本帖最后由 sfqxx 于 2023-4-17 22:25 编辑

在 `scanf("%c",&g -> vertex.name);` 这一行代码中,应该在变量名 g 之后使用箭头符号 "->" ,而非点号"."。

因此正确的代码应该是 scanf("%c", &g->vertex->name);(把 i的空格去掉)
有用请设置最佳答案

多捞啊 发表于 2023-4-17 22:39:45

sfqxx 发表于 2023-4-17 22:15
在 `scanf("%c",&g -> vertex.name);` 这一行代码中,应该在变量名 g 之后使用箭头符号 "->" ,而非点号"." ...

G -> vertex 这应该不是指针吧,结构体调用本身的数据不是用 -> 这个符号吧

而且问题描述是这样的:Member reference type 'char' is not a pointer

sfqxx 发表于 2023-4-18 17:33:40

这个错误是因为结构体里的name成员应该是一个字符数组类型,而非一个字符类型。

我们可以将VertexType重新定义如下:


#define MAX_NAME_LEN 20 // 假设最大名字长度为20

typedef struct _vertex{
    char name;
} VertexType;


然后在代码中修改`Creat_UnALGraph_UnWeighted`函数中的读取name的部分:


void Creat_UnALGraph_UnWeighted(ALGraph* G){
    printf("请输入边数和顶点数\n");
    getchar();
    scanf("%d",&G -> vertices);
    scanf("%d",&G -> edges);

    for(int i = 0; i < G->vertices; ++i) {
      printf("请输入第 %d 个顶点的名字\n", i+1);
      getchar();
      scanf("%s", G->vertex.name);
      G->vertex.first = NULL;
    }
}


这样就可以正确读取每个顶点的名字了。

多捞啊 发表于 2023-4-18 22:27:47

sfqxx 发表于 2023-4-18 17:33
这个错误是因为结构体里的name成员应该是一个字符数组类型,而非一个字符类型。

我们可以将VertexType重 ...

新的思路
但是可以不用将其拆解开来吗?
我注意到我标注出的代码在另一些人的机器上是可以编译并且运行的,
我不知道这是为什么?

两手空空儿 发表于 2023-4-19 11:02:22

本帖最后由 两手空空儿 于 2023-4-19 17:20 编辑

多捞啊 发表于 2023-4-17 22:39
G -> vertex 这应该不是指针吧,结构体调用本身的数据不是用 -> 这个符号吧

而且问题描述是这样的:Me ...

Member reference type 'char' is not a pointer
提示说,是类型char和pointer不匹配,
VertexType name;
    Edge* first;         //这里是指针

scanf("%c",&G -> vertex.name);
G -> vertex.first;//但是这里什么也没干,楼主是不是少写了点儿什么?????

多捞啊 发表于 2023-4-19 15:22:07

本帖最后由 多捞啊 于 2023-4-19 15:24 编辑

两手空空儿 发表于 2023-4-19 11:02
Member reference type 'char' is not a pointer
提示说,是类型char和pointer不匹配,
VertexType nam ...

&G -> vertex.name

两手空空儿 发表于 2023-4-19 17:18:27

本帖最后由 两手空空儿 于 2023-4-19 17:21 编辑

多捞啊 发表于 2023-4-19 15:22


G -> vertex.first;//这一句是想干什么,是不是少写了点儿什么???原码上有,这里没有发出来

多捞啊 发表于 2023-4-19 20:37:44

两手空空儿 发表于 2023-4-19 17:18


原码在一楼

G是指向邻接表ALGraph的指针

vertex 是由头表 HeadNode 所创建的数组,头表包含一个 char类型的 name 和 指向边表的指针 *first

边表 包含 int类型的权重: weight 、 int类型的邻接点: adjacency 、 指向下一个边表的指针: *next

多捞啊 发表于 2023-4-19 20:39:18

两手空空儿 发表于 2023-4-19 17:18


https://img-blog.csdnimg.cn/007ed5e971a34663b49144e8c6d5be5c.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAVVJMZWlzdXJl,size_20,color_FFFFFF,t_70,g_se,x_16

两手空空儿 发表于 2023-4-20 10:02:45

本帖最后由 两手空空儿 于 2023-4-20 10:06 编辑


我看不出什么语法错误,但是你的机器报红了

Member reference type 'char' is not a pointer

VertexType name;// 这个name是个自定义类型吧,它是char的么,我感觉它是个指针类型吧,所以才会报 is not a pointer
scanf("%c",&G -> vertex.name);


G -> vertex.first;//这句话有意义么?????

多捞啊 发表于 2023-4-20 15:40:08

两手空空儿 发表于 2023-4-20 10:02


我在此之前已经定义:

typedef char VertexType;

我用的Clion,文件是.c结尾,但是那句话就是编译不过去,我看其他人也是这样写的,我没整明白为什么编译不过去

至于 G -> vertex.first; 这句就不用管了

两手空空儿 发表于 2023-4-21 10:00:34

别人都能过,只自己的不行,那就换一个工具,干嘛和自己过不去
就算你把这个问题解决了,可能还有其它隐藏的问题,何苦为难自己

多捞啊 发表于 2023-4-21 20:51:30

两手空空儿 发表于 2023-4-21 10:00
别人都能过,只自己的不行,那就换一个工具,干嘛和自己过不去
就算你把这个问题解决了,可能还有其它隐藏 ...

有道理{:10_256:}
页: [1]
查看完整版本: 指针指向结构体数组,结构体数组调用其内部数据编译失(问题代码已用红色标注)....