函数在c中不能返回null
我的代码应该将StackNode项推入堆栈。但是,当堆栈已满时,我尝试让函数不再推送,并返回null,但它不会返回null函数在c中不能返回null,c,null,stack,C,Null,Stack,我的代码应该将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"); r
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;
}
下面是我得到的错误:
错误:从不兼容的函数返回“void*”
结果类型“堆栈”(也称为“结构堆栈”)
返回NULL代码>
我不知道这是什么意思。我怎么修理它?堆栈的空等价物是什么?问题是函数必须返回类型为堆栈的值
您提供的代码没有定义NULL
的类型,但是,由于您没有看到另一个错误并且正在将其分配给节点
,因此我猜NULL
的类型是StackNode*
。。。或者,至少是与之相适应的东西
这就是你的问题。当函数声明返回一个堆栈时,您正试图返回类型为StackNode*
的内容
您最好重新设计此函数,该函数返回的是推送操作的结果,而不是堆栈本身。可能有一些基本问题需要重新考虑:
首先,只有指针可以是NULL
,而不是对象。因此,如果返回类型为struct Stack
(不是指针)的对象,则不能返回NULL
,而只能返回struct Stack
的实例
其次,通过值传入并返回struct Stack
的对象将导致复制相应的对象;我认为传递引用或指针将是一个更好的选择;并且-如果传入并返回指针,还可以返回NULL
以指示堆栈已满或其他问题 错误消息中有什么不清楚?NULL
是Stack
类型的值吗?我不知道堆栈的NULL等价物是什么。没有等价物。您的函数和方法必须重新设计。例如,returnbool
,这将指示成功/失败。@ashadeka:这由您决定。为什么您甚至试图通过值传递和返回堆栈?这毫无意义。您需要对传递(和返回)方法进行彻底的重新设计。“您提供的代码没有定义NULL的类型,但是,由于您没有看到另一个错误并且正在将其分配给node,因此我猜NULL的类型是StackNode*…或者至少是与之兼容的。”NULL由实现提供,当然也不会是一个StackNode*
。它通常是0
,或(void*)0
。它是C和C++的一部分,很可能是的…但是NULL
只有在包含定义它的标题时才被定义为(void*)0
。OP的完整代码包含该标题的可能性要比OP试图创建自己的NULL
而未能实际编写所述定义或甚至向我们提及该定义的可能性高出几个数量级。