gpt4 book ai didi

名称正确,但是 "dereferencing pointer to incomplete type"

转载 作者:行者123 更新时间:2023-11-30 21:05:08 25 4
gpt4 key购买 nike

我遇到了这个错误:

cities.c: In function ‘main’:
cities.c:7:48: error: dereferencing pointer to incomplete type ‘struct Graph’
printf("well, it got here. nodeCount: %d\n", x->nodeCount);

所有其他解决方案都指出名称拼写错误,因此未定义,但是,如果我将 struct Graph 定义移动到标题,它就可以正常工作。

我之前在我的其他库中使用过这个机制,它仍然编译得很好,我花了几个小时尝试移动东西但无济于事。

图.h:

#ifndef GRAPH_H
#define GRAPH_H

typedef struct Graph * Graph;

int graphCreate(Graph*, int);
int graphAddPath(Graph, int, int, unsigned int);
int graphRemovePath(Graph, int, int);
int graphDestroy(Graph*);

#endif /* GRAPH_H */

graph.c: https://pastebin.com/FzkaJJwP

cities.c:

#include "graph.h"
#include <stdio.h>

int main() {
Graph x;
graphCreate(&x, 5);
printf("well, it got here. nodeCount: %d\n", x->nodeCount);
}

输出与我的库中的预期一致,位于 https://git.mif.vu.lt/emiliskiskis/c_deck .

感谢您的帮助。

最佳答案

  1. struct Graph 的定义位于 graph.c 文件中。当您编译cities.c 文件时,此定义不可见。您需要将定义移动到graph.h

    struct Graph {
    unsigned int **matrix;
    int nodeCount;
    };
  2. 根据 Blaze 的建议,以下定义令人困惑。 typedef struct Graph * Graph。更好的解决方案是

    typedef struct Graph Graph;

然后在代码中您可以使用

int graphCreate(Graph **, int);
int graphAddPath(Graph *, int, int, unsigned int);
int graphRemovePath(Graph *, int, int);
int graphDestroy(Graph **);

关于名称正确,但是 "dereferencing pointer to incomplete type",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56339762/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com