2017-01-31 7 views
-3

私のコードはStackNodeアイテムをスタックにプッシュすることになっています。しかし、スタックがいっぱいになると、私はもう関数を呼び出せず、nullを返しますが、nullを返しません!私はこれが何を意味するのかわからないんだけど error: returning 'void *' from a function with incompatible result type 'Stack' (aka 'struct Stack') return NULL;関数はCでnullを返すことはできません

:ここ

Stack push(Stack stk,int data) 
{ 
    struct StackNode *top = stk.top; 
    struct StackNode *node = malloc(sizeof(struct StackNode)); 
    if(node == NULL) 
    { 
    printf("Stack is full\n"); 
    return NULL; 
    } 

    node->data = data; 
    node->nextNode = top; 
    stk.top = node; 
    stk.count++; 
    return stk; 
} 

は私が取得していますエラーです。どうすれば修正できますか? Stackに相当するNULLは何ですか?

+1

エラーメッセージには何が表示されますか。 'NULL'は' Stack'型の値ですか? –

+0

スタックのヌル相当が何であるか分かりません – ashadeka

+1

相当品はありません。 –

答えて

0

問題は、関数がタイプStackの値を返す必要があることです。

あなたが別のエラーを見ていないとあなたがnodeに割り当てているので、あなたは、NULLのタイプを定義していない提供が、コードは、私が... NULLの種類がStackNode *であることを推測しますか少なくとも、それと互換性のあるもの。

あなたの問題があります。あなたの関数がStackを返すと主張しているときに、タイプStackNode *のものを返そうとしています。

ではなく、push操作の結果を返すこの機能を再設計することをお勧めします。

+1

_ "あなたが提供したコードはNULLの型を定義していませんが、別のエラーが表示されず、それをノードに割り当てているので、NULLの型がStackNode *少なくともそれと互換性のあるものです。 "_ NULLは実装によって提供され、確かに' StackNode * 'にはなりません。たいていは '0'、'(void *)0'です。これはCおよびC++の一部です。 –

+0

ほとんどの場合、そうですが、NULLを定義するヘッダーをインクルードした場合、 'NULL'は'(void *)0'としてのみ定義されます。 – Dancrumb

+0

OPの完全なコードにはヘッダーが含まれている可能性があるので、OPが自分自身の「NULL」を作成しようとしていて、実際にこの定義を書いたり、 –

1

多分、あなたが考えるべき基本的なことがいくつかあります: 最初にポインタはNULLですが、オブジェクトではありません。したがって、タイプstruct Stack(ポインタではない)のオブジェクトを返すと、NULLを返すことはできず、struct Stackのインスタンスだけを返すことができます。

第2に、渡してオブジェクトstruct Stackを値で返すと、それぞれのオブジェクトがコピーされます。私は、参照やポインタを渡す方が良い選択だと思います。 - 渡してポインタを返す場合は、NULLを返して完全なスタックまたはその他の問題を示すこともできます。

関連する問題