c - 不兼容的返回类型

标签 c incompatibletypeerror

我有一个问题,不兼容的返回类型错误是什么意思?我一直收到这样的错误,我已经多次更改我的代码,但什么也没有。任何人都可以帮助我,谢谢。

我在以下位置收到错误:

circular_list.c: In function ‘circ_list_iterator’:
circular_list.c:116:( return lst ? NEXT(lst) : NULL; )error: incompatible types in return
circular_list.c:118:( return (lastreturn == lst) ? NULL : NEXT(lastreturn); )error: incompatible types in return
circular_list.c:119:( } )warning: control reaches end of non-void function
circular_list.c: In function ‘circ_length’:
circular_list.c:127:( while( (lastreturn = circ_list_iterator(lst, lastreturn)) != NULL))error: incompatible types in assignment
circular_list.c: In function ‘nth_node’:
circular_list.c:136:( return NULL; )error: incompatible types in return
circular_list.c:138:( return lst; )error: incompatible types in return
circular_list.c:145:( return (number != 0) ? NULL : tmp; )error: incompatible types in return

circular_list.c

#include <stdio.h>
#include <stdlib.h>
#include "globals.h"
#include "circular_list.h"

typedef struct node *list_rep;

typedef struct node {
    generic_ptr datapointer;
    list_rep    next;
} node;


#define DATA(lst) (((list_rep) (lst))->datapointer)
#define NEXT(lst) (((list_rep) (lst))->next)

#define TOLIST(list_rep) ((list)    (list_rep))
#define TOREP(lst)       ((list_rep)(lst))

#define TOLISTPTR(list_rep_ptr) ((list *)    (list_rep_ptr))
#define TOREPPTR(lst_ptr)       ((list_rep *)(lst_ptr))

static status allocate_node (list_rep *p_lst, generic_ptr data)
{
    list lst = (list) malloc(sizeof(node));

    if (lst == NULL)
            return ERROR;

    *p_lst = lst;
    DATA(lst) = data;
    NEXT(lst) = NULL;

    return OK;
}

static void free_node (list *p_lst)
{
    free(*p_lst);
    *p_lst = NULL;

extern status init_circ_list (list *p_lst)
{
    *p_lst = NULL;
    return OK;
}
extern bool   empty_circ_list (list lst)
{
    return (lst == NULL) ? TRUE : FALSE;
}

status circ_insert (list *p_lst, generic_ptr data)
{
    list_rep lst, *p_lst_rep = TOREPPTR(p_lst);

    if (allocate_node(&lst, data) == ERROR)
            return ERROR;

    if (empty_circ_list(*p_lst)) {
            NEXT(lst) = lst;
            *p_lst_rep = lst;
    } else {
            NEXT(lst) = NEXT(*p_lst_rep);
            NEXT(*p_lst_rep) = lst;
    }
    return OK;
}

status circ_length     (list lst)
{
    list lastreturn;
    int length;

    length = 0;
    lastreturn = NULL;
    while( (lastreturn = circ_list_iterator(lst, lastreturn)) != NULL)
            length++;
    return length;
}
status nth_node        (list lst, int number)
{
    list tmp;

    if (empty_circ_list(lst) == TRUE)
            return NULL;
    if (number == -1)
            return lst;

    tmp = lst;
    do {
            tmp = NEXT(tmp);
            number--;
    } while (number > 0 && tmp != lst);
    return (number != 0) ? NULL : tmp;

    return 0;
}
status circ_traverse   (list lst, status     (*p_func_f)())
{
    list tmp;

    if (empty_circ_list(lst) == TRUE)
            return OK;

    tmp = lst;
    do {
            tmp = NEXT(tmp);
            if ((*p_func_f)(DATA(tmp)) == ERROR)
                    return ERROR;
    } while (tmp != lst) ;
return OK;
}

循环列表.h

#include "globals.h"

#ifndef _CIRCULAR_LIST_H
#define _CIRCULAR_LIST_H

typedef list lastreturn;
ABSTRACT_TYPE(list);

extern status init_circ_list  (list *p_lst);
extern bool   empty_circ_list (list lst);
extern status circ_insert     (list *p_lst, generic_ptr data);
extern status circ_append     (list *p_lst, generic_ptr data);
extern status circ_delete     (list *p_lst, generic_ptr *p_data);
extern status circ_delete_node(list *p_lst, list node);
extern status circ_list_iterator (list lst, list lastreturn);
extern status circ_length        (list lst);
extern status nth_node           (list lst, int number);
extern status circ_traverse      (list lst, status     (*p_func_f)());

extern generic_ptr  circ_head(list lst);
extern list         circ_tail(list lst);

#endif

全局变量

#ifndef _GLOBALS_H
#define _GLOBALS_H

typedef enum {OK, ERROR} status;
typedef enum {FALSE = 0, TRUE = 1} bool;

typedef void *generic_ptr;

typedef unsigned char byte;

#define ABSTRACT_TYPE(t)    
typedef void *(t)

#endif

最佳答案

这看起来不对:

status nth_node(list lst, int number)
{
    list tmp;

    ...

    return (number != 0) ? NULL : tmp;

    ...
}

tmp 不是status

关于c - 不兼容的返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9949636/

相关文章:

C11内存栅栏和原子操作

c - 溢出

c - 为什么我的代码会出现无限循环?

Java 错误 : "incompatible types" message

c - [-Win 兼容指针类型]。不知道是什么问题

c - C-使用fgets直到换行符/-1

代码注释现在会生成编译器错误

c - "Incompatible integer to pointer conversion"

Java ~ 返回数组时类型不兼容?

ios - 从不兼容的 double 类型分配给 NSNumber