2016-08-15 81 views
0

所以我在我的頭path.h定義的結構如下:「提領指向不完全類型」

typedef struct path Path; 

struct Path { 

    Path* branching_paths; 
    uint32_t nb_paths; 
}; 

,並在相同的標題我已經聲明和定義下列內聯函數:

inline void init_path(Path* path); 

    inline void init_path(Path* path){ 

    path->branching_paths = NULL; 
    path->nb_paths = 0; 
} 

而且我不知道是什麼原因,我得到這個錯誤。我已經在網上搜索,但據我看,我已經在頭正確定義的結構,還是我失去了一些東西?

./../Path.h:54:9: error: dereferencing pointer to incomplete type 'Path {aka struct path}' 
    path->branching_paths = NULL; 
+3

這是因爲結構的路徑是不一樣的結構路徑。 – 2501

+0

但如果我鍵入typedef結構路徑路徑,我沒有叫它然後路徑? – malajedala

+0

什麼是'struct path'? – yano

回答

1

您的typedef中有一個錯字。

您爲struct path定義了一個typedef,然後您以後定義了struct Path。由於C區分大小寫,因此這些被視爲兩種不同的類型。

您現在的方式是,您將struct path(以Path作爲別名)聲明,但尚未定義它。所以當你試圖解引用Path *時,編譯器不知道那個結構是什麼樣子,因爲你沒有告訴它。

你想要的是:

typedef struct Path Path; 
+0

這不是一個錯字,我想我現在只是不明白,通過編寫:'typedef結構路徑路徑'我將結構路徑定義爲路徑,所以當然「結構路徑」尚未定義。對? – malajedala

+0

@malajedala:是的,在typedef的末尾,沒有定義'struct path'。麻煩的是在'struct path {...};','struct path'的末尾仍然沒有定義。你需要'typedef struct Path Path;'作爲最簡單的修復。 –

+0

是的,這是真的,謝謝!我會這樣做,它是最簡單的。不過這個錯誤很好,所以現在我真的明白這些命令背後發生了什麼!謝謝 – malajedala

相關問題