C - 取消引用指向不完整类型的指针

时间:2012-03-07 17:37:41

标签: c compiler-errors

我已经阅读了关于同一错误的5个不同的问题,但我仍然无法找到我的代码有什么问题。

的main.c

int main(int argc, char** argv) {
    //graph_t * g = graph_create(128); //I commented this line out to make sure graph_create was not causing this.
    graph_t * g;
    g->cap; //This line gives that error.
    return 1;
}

.C

struct graph {
    int cap;
    int size;
};

·H

typedef struct graph graph_t;

谢谢!

4 个答案:

答案 0 :(得分:2)

您不能这样做,因为结构是在不同的源文件中定义的。 typedef的重点是隐藏您的数据。可能会调用graph_capgraph_size等函数来为您返回数据。

如果这是您的代码,您应该在头文件中定义struct graph,以便包含此标头的所有文件都能够定义它。

答案 1 :(得分:1)

当编译器正在编译main.c时,它需要能够查看 struct graph的定义,以便它知道存在名为cap的成员。您需要将结构的定义从 .c 文件移动到 .h 文件。

如果您需要graph_topaque data type,另一种方法是创建访问器函数,该函数采用graph_t指针并返回字段值。例如,

graph.h

int get_cap( graph_t *g );

graph.c

int get_cap( graph_t *g ) { return g->cap; }

答案 2 :(得分:0)

必须是您定义事物的顺序。 typedef行需要显示在包含main()。

的文件的头文件中

否则它对我来说很好。

答案 3 :(得分:0)

lala.c

#include "lala.h"

int main(int argc, char** argv) {
    //graph_t * g = graph_create(128); //I commented this line out to make sure graph_create was not causing this.
    graph_t * g;
    g->cap; //This line gives that error.
    return 1;
}

lala.h

#ifndef LALA_H
#define LALA_H

struct graph {
    int cap;
    int size;
};

typedef struct graph graph_t;

#endif

编译没有问题:

gcc -Wall lala.c -o lala