2015-11-18 44 views
0

我想構建一個名爲「cache」的結構,它包含一個容器(一個已經實現的List類型的數組)和一個迭代器。 當我試圖使容器中的下一個List的迭代器點我得到「指向未知結構的指針的增量」和「指向不完整類型的指針的算術」。我喜歡一個解釋,我做錯了什麼:爲什麼我會得到「指向未知結構的指針增量」?

名單如下typedef操作:

typedef struct List_t *List; 

所以列表是一個指向List_t結構。

緩存定義如下:

typedef struct cache_t* Cache; 

struct cache_t { 
    List* container; 
    int cache_size; 
    List iterator; 
}; 

所以迭代器是一個列表,其是一個指向List_t在陣列中(容器)。 我試圖做的是:

cache->iterator ++; //cache is an object of type Cache 

其中,因爲據我所知,應該由移動的sizeof(列表)迭代器到數組中的下一個列表。那麼爲什麼我會收到錯誤?

謝謝!

+0

顯示'cache'的定義.. –

+3

顯示'struct List_t'的定義,它不在您的發佈中。如果它不在源文件中,那麼錯誤似乎是合乎邏輯的,因爲'struct List_t'是不完整的類型,它的大小是未知的,所以它的指針(類型'List')不能被增加。 – user1969104

+1

不要'typedef'指針。這隱藏了語義和結果的錯誤,就像你展示的那樣。相反,只能明確地使用它們。 (無論如何,指針的名稱「List」都是有誤導性的)。 – Olaf

回答

1

指針不會增加sizeof(List),而會增加sizeof(struct List_t)struct List_t的定義不存在於您的來源中,因此是不完整的類型。這是錯誤的原因。

+0

謝謝!我用列表(列表*)來獲得我想要的結果 – shayelk

相關問題