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

私の質問は、不完全なクラスとは正確には何ですか? 助けてください、ありがとう。

4

3 に答える 3

1

不完全なクラス (または型) は、前方宣言されているが定義されていない型です。あなたのようにtnode。おそらく、必要なものを取得するには、例の構造のタグとして置き換える必要がありますnodetnode

于 2012-03-11T19:22:51.953 に答える
1

Tptrとしてtypedefしましたstruct tnode *が、tnode定義も宣言もされていません。おそらく、代わりにnode構造体に名前を付けるつもりでしたか?tnode

ところで、将来それが起こらないようにする簡単な方法があります...

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

その時点で、の名前を別のものにTptr変更したとしても、 は常に正しい型のエイリアスです。tnode

于 2012-03-11T19:24:16.793 に答える
1

「不完全なクラス型」は、C にはクラスがないため、これが C コードではなく C++ コードであるとコンパイラが認識していることを示しています。

5行目は、「ノード」ではなく「tノード」、小文字のt、ノード、「tノード」という名前の構造体へのポインタTptrの名前を作成していることに注意してください。struct tnode *6 行目で typedef を開始し、次に "node" という名前の構造体の定義を開始します。"t" はなく、"node" だけです。11 行目で「struct node」の定義を終了し、以前の typedef の名前「Tnode」、大文字の T、node を指定します。

ここには、Tptr、Tnode、tnode、および node という 4 つの異なる名前があります。小文字の "t" を持つものは "完了" したことがないため、"不完全型" です (ただし、C にはクラスがないため、クラスではありません)。

于 2012-03-11T19:26:32.010 に答える