2013-01-08 74 views
1

我有這樣的結構在文件「vector.c」:錯誤:解除指向不完整類型的指針 - 爲什麼?

struct Vector 
{ 
int * m_items; 
int m_size; 
int m_extSize; 
int m_numItems; 
}; 

開「的main.c」我想,以檢查是否有一定矢量值m_items爲NULL:

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

我用值初始化「vec」之後就做了這個 - 矢量有1個值(我檢查過它)。 然而,海合會正在寫一個錯誤上述行:

Error: dereferencing pointer to incomplete type 

爲什麼呢?

+0

你必須在頭文件中定義'Vector'。 – imreal

+0

@Nick我在頭文件中定義了它,如下所示: typedef struct Vector Vector; – cookya

回答

2

您必須將Vector的整個定義移動到頭文件並將其包含在vector.c和main.c中。

僅添加typedef struct Vector Vector;是不夠的。這只是告訴編譯器有一個Vector類型,並在其他地方定義,所以它是不完整的。它可以讓你聲明指針,因爲它不需要知道它有哪些成員來分配指針。所有的指針都是相同的大小。

+1

@cookya編譯器正在原諒,並假設它將在稍後定義;就像我上面所說的那樣,它不需要定義來分配一個指針,但它確實需要它來解引用它。 – imreal

相關問題