我的代码应该将StackNode项目推送到堆栈中。但是,当堆栈已满时,我试图让函数不再推送,并返回null,但它不会返回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;
}
以下是我得到的错误:
error: returning 'void *' from a function with incompatible
result type 'Stack' (aka 'struct Stack')
return NULL;
我不确定这意味着什么。我如何解决它?什么是堆栈的NULL等价物?
答案 0 :(得分:1)
也许你应该重新思考一些基本的东西:
首先,只有指针可以是NULL
,而不是对象。因此,如果返回类型为struct Stack
的对象(不是指针),则不能返回NULL
而只返回struct Stack
的实例。
其次,按值传入和返回struct Stack
的对象将导致复制相应的对象;我认为传递引用或指针是更好的选择; - 如果你传入并返回一个指针,你也可以返回NULL
来表示完整的堆栈或其他问题。
答案 1 :(得分:0)
问题是您的函数必须返回类型为Stack
的值。
您提供的代码并未定义NULL
的类型,但是,由于您没有看到其他错误,并且您将其分配给node
,我会猜测NULL
的类型是StackNode *
......或者至少是与此类似的东西。
所以,那就是你的问题。当您的函数声明返回StackNode *
时,您尝试返回类型为Stack
的内容。
您最好的选择是重新设计此函数,该函数返回push
操作的结果,而不是Stack
本身。