2017-03-27 5 views
1

だから、これはそのidに基づいてツリー内のノードの簡単な検索のためのコードですノード:警告:コントロールは非void型関数の終わりに到達した[-Wreturn型] |私は機能の警告を取得し、私はので、私はその警告を取得することはできません関数を記述する方法がわからないもう

NodeT *searchNode(NodeT *parent, int id) 
{ 
    if(parent == NULL) printf("\nThere is no tree."); 
    if(parent->id == id) 
     return parent; 
    else 
    { 
     if(parent->left != NULL) searchNode(parent->left, id); 
     if(parent->right != NULL) searchNode(parent->right, id); 
    } 
} 

はまた、私はこれを取得しています次のように

ノードが定義されています。

typedef struct node_type 
{ 
    char id; 
    struct node_type *left, *right; 
} NodeT; 

は、私はその警告を取り除くことができます方法はありますか?

+3

警告はきわめて明確です。 'parent-> id!= id'の場合、関数は何を返しますか?あなたが宣言した場合、関数は常に**何かを返さなければなりません。 – StoryTeller

+1

[警告:制御は非void関数の終わりに達しますが、実際には関数はintとして宣言され、intを返します](http://stackoverflow.com/questions/10964528/warning-control-reaches-end)実際の機能はありません) – StoryTeller

+0

ありがとうございます、あなたの答えは私の多くを助けました。もし私が 'if(parent-> left!= NULL)のsearchNode(parent-> left、id);を' return searchNode(parent-> left、id);を返すように置き換えると、プログラム警告なしで正常に機能します。 'if(parent-> right!= NULL)searchNode(parent-> right、id);'と同じです。 – ISimion

答えて

0

あなたの機能は、特定の状況下で何かを返します。警告は、あなたが何らかの状況下で何かを返す必要があることを伝えています。それはいくつかのバグを強調表示するので、あなたのコードの場合、非常に重要な警告です。 parentNULLある場合はどうなり

if(parent == NULL) printf("\nThere is no tree."); 
if(parent->id == id) 

?それはエラーメッセージを表示し、次の行に進み、クラッシュします。あなたは、コードが他のブロックに機能コードの残りの部分を続行するか、入れないように、それが本当ならば最初ifもreturn文を持っていることを望みます。あなたのツリーはそれにいくつかのノードがある場合

次に何が起こりますか?あなたは木を横断しますが、結果は無視してください!存在しないノードを検索すると、そのノードに対しても何も返されません。

それが結果を見つけるか、自分自身を再帰的に呼び出しから戻ってそれに渡された結果を返すことができないのであれば、あなたはreturn NULLにコードを変更する必要があります。

関連する問題