qimujun
迷途的启木菌
采纳率90.5%
2019-11-13 20:06

创建链表的时候,怎么也解决不了warning C4013和error C2371,希望大佬指教

已采纳

网上查找说的是函数没有放在main 函数之前,但是我都没有创建main函数,并且就算在函数最后添加main函数,错误也还是这样的。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define H "-----------------------"


typedef struct Person
{
    char name[20];
    char addr[20];
    char tele[20];
    char qq[20];
    struct Person *next;
}PERSON;

PERSON *head;

void lcreate()
{
    PERSON *pb;
    char ch;

    do
    {
        pb = malloc(sizeof(PERSON));
        if (!pb)
        {
            printf("cannot have house!");
            getchar();
            exit(1);
        }
        printf("%s\nPlease put in name:", H);
        gets_s(pb->name,20);
        printf("%s\nPlease put in address:",H);
        gets_s(pb->addr,20);
        printf("%s\nPlease put in phone:",H);
        gets_s(pb->tele,20);
        printf("%s\nPlease put in QQ:",H);
        gets_s(pb->qq,20);

        linsert(pb);
        printf("yes or no put in next informantion!(y/n)");
        ch = getchar();
        fflush(stdin);
    } while (ch == 'y' || ch == 'Y');
}

void DeleteList(PERSON *head)
{
    PERSON *DElem, *next;
    DElem = head;
    while (DElem)
    {
        next = DElem->next;
        free(DElem);
        DElem = next;
    }
}

void linsert(PERSON *p)
{
    PERSON *pa, *pb;
    pb = head;
    if (!head)
    {
        head = p;
    }
    else
    {
        while (pb)
        {
            pa = pb;
            pb = pb->next;
        }
        pa->next = p;
    }
    p->next = NULL;
}

void ldel(char *name)
{
    PERSON *pa, *pb;
    if (!head)
    {
        printf("linst is null!\n");
        getchar();
        exit(1);
    }
    pb = head;
    while (strcmp(pb->name, name) && pb->next)
    {
        pa = pb;
        pb = pb->next;
    }
    if (!strcmp(pb->name, name))
    {
        if (pb = head)
        {
            head = pb->next;
        }
        else
        {
            pa->next = pb->next;
        }
        free(pb);
    }
}

1>------ 已启动生成: 项目: Project7, 配置: Debug Win32 ------
1>源.c
1>d:\c++暂存文件\project7\project7\源.c(41): warning C4013: “linsert”未定义;假设外部返回 int
1>d:\c++暂存文件\project7\project7\源.c(60): error C2371: “linsert”: 重定义;不同的基类型
1>已完成生成项目“Project7.vcxproj”的操作 - 失败。
===== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ======

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

2条回答

  • caozhy 回答这么多问题就耍赖把我的积分一笔勾销了 2年前

    不是要放在main前面,而是要先申明后调用

    insert(pb);
    你这里调用了
    void linsert(PERSON *p)
    这里才定义,所以要在
    void lcreate()
    前面加上一行
    void linsert(PERSON *p); //别忘记最后的分号。

    点赞 1 评论 复制链接分享
  • BostonRayAlen bostonAlen 2年前

    三个问题(此处我仅仅解决你的编译问题,逻辑我没看)
    1 linsert未定义,需把linsert前置,即放在你调用linsert函数之前声明,或者直接把实现放在前面
    2 解决linsert之后,你的程序中有很多指针未初始化,未分配空间。需要分配空间,提醒(指针慎用)。
    图片说明
    3 最后就是你的.c文件必须要有main,你直接右键编译这个文件是没有问题,能编译成功,但因为main是入口,你是无法生成解决方案的。
    图片说明

    点赞 2 评论 复制链接分享