2012-03-11 98 views
0

我在這一步難倒同時實施三叉樹:錯誤:指向不完全類類型是不允許

#include<stdio.h> 
#include<string.h> 
#include<stdlib.h> 

typedef struct tnode *Tptr; 
    typedef struct node 
{ 
    char splitchar; 
    Tptr lokid,eqkid,hikid; 

}Tnode; 

int research(Tptr p,char *s) 
{ 
    if (!p) return 0; 
    if (*s<p-> 
} 

int main(){ 
    return 0; 
} 

當我移動靠近p鼠標圖標,它顯示了我一個紅色和錯誤:

pointer to incomplete class type is not allowed 

我的問題正是什麼是不完整的類?請幫助我,謝謝。

+0

你忘了定義'struct tnode'。另外,你確定你有一個C編譯器嗎? – 2012-03-11 19:21:04

+0

我有visual c + 2010,據我所知,它支持c以及 – 2012-03-11 19:22:30

+1

C +?如果你的意思是Visual C++,那不是一個真正的C編譯器。你可能仍然能夠解決某些問題,但我只是說,一個真正的C答案不會幫助你編譯該程序。 – 2012-03-11 19:23:33

回答

1

您輸入了Tptr作爲struct tnode *,但tnode未定義或甚至未被聲明。也許你的意思是命名你的node struct tnode而不是?

BTW,有一個簡單的方法來保持從在未來發生的事情......

typedef struct tnode { 
    ... 
} Tnode, *Tptr; 

在這一點上,Tptr始終是一個別名爲正確的類型,即使你改變tnode的名字到別的東西。

+0

是@cHao我修復了它,謝謝 – 2012-03-11 19:27:09

+0

另一個想法是根本不使用指針typedefs,那麼就沒有機會搞砸了 – 2017-02-25 05:57:32

1

不完整的類(或類型)是正向聲明的類型,但未定義。就像你的tnode。 也許你應該用tnode替代node作爲你例子中結構的標籤來獲得你所需要的。

1

「不完整的類類型」表明您的編譯器認爲這是C++代碼而不是C代碼,因爲C沒有類。

注意,5號線,使Tptr的名稱struct tnode *終場以一個名爲「TNODE」,而不是「點」,而是「TNODE」,小寫字母T,節點結構。第6行啓動了一個typedef,然後開始定義一個名爲「node」的結構,沒有「t」,只是「node」。第11行完成「struct node」的定義,然後爲較早的typedef提供一個名稱:「Tnode」,大寫的T節點。

現在您有四個不同的名稱:Tptr,Tnode,tnode和節點。小寫字母「t」從來沒有「完成」,所以它是一個「不完整類型」(但不是類,因爲C沒有類)。

相關問題