错误:取消引用指向不完整类型的指针 - 为什么?

时间:2013-01-08 19:00:39

标签: c gcc

我在文件" vector.c":

中有这个结构
struct Vector
{
int * m_items;
int m_size;
int m_extSize;
int m_numItems;
};

On" main.c"我试图检查某个向量的值m_items是否为NULL:

if (! vec->m_items)
        printf("not fail\n");

我是在初始化" vec"之后做的。带有值 - 向量有1个值(我检查过它)。 但是,gcc正在为上面一行写错误:

Error: dereferencing pointer to incomplete type

为什么?

1 个答案:

答案 0 :(得分:2)

您必须将Vector的整个定义移到头文件中,并将其包含在vector.c和main.c中。

添加typedef struct Vector Vector;是不够的。这仅仅告诉编译器存在类型Vector并且在其他地方定义,因此,它是不完整的。它允许您声明指向它的指针,因为它不需要知道它有哪些成员来分配指针。所有指针的大小都相同。