最好的我们! 2024-02-18 00:11 采纳率: 50%
浏览 50
已结题

重定义:不同的基类型。函数指针数组


#define  _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>

void menu()
{
    printf("————————————请选择以下模式:————————\n");
    printf(" 1、+             2、-  \n");
    printf(" 3、*             4、/  \n");
    printf(" 0、退出游戏          \n");
    printf("————————————————————————————————————\n");
}

int add(int a, int b)
{
    return a + b;
}

int sub(int a, int b)
{
    return a - b;
}

int mul(int a, int b)
{
    return a * b;
}

int div(int a, int b)
{
    return a / b;
}


int main()
{
    int input = 0;
    int a = 0, b = 0;
    int z = 0;
    int(*p[5])(int, int) = { 0,add,sub,mul,div };
    do
    {
        menu();
        printf("请选择:\n");
        scanf("%d", &input);
        printf("请输入两个操作数:\n");
        scanf("%d%d", &a, &b);
        if (input >= 1 && input <= 4)
        {
            z = p[input](a, b);
            printf("%d\n", z);
        }
        else if (input == 0) printf("退出游戏\n");
        else printf("输入错误\n");
    } while (input);
    return 0;
}

为什么编译时显示:严重性 代码 说明 项目 文件 行 禁止显示状态 详细信息
错误 C2371 “div”: 重定义;不同的基类型 calculator D:\penggeC\daima\calculator\2024.2.17zhuanyima.c 20 。
错误C2371是由于在代码中重定义了名为"div"的函数,而"div"是C标库中的一个函数名,用于整数除法运算。为了解决这个问题,

可以采取以下两种方法之一:

**更改函数名**:将代码中的函数名"div"修改为其他不会与C标准库冲突的名称,例如"my_div"。

**使用条件编译**:在代码开头添加条件编译指令,避免与C标准库中的函数名冲突。具体做法是在代码开头添加以下代码:

#define _CRT_SECURE_NO_WARNINGS 1

然后我的开头是有写这句条件编译的,为什么会错误呢

  • 写回答

2条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-02-18 00:12
    关注

    引自免费微信小程序:皆我百晓生

    在您的C语言代码中,错误提示“严重性 代码 说明 项目 文件 行 禁止显示状态 详细信息 错误 C2371 “div”: 重定义;不同的基类型”通常意味着编译器检测到div函数在同一作用域内被多次声明,并且每次声明时的类型(基类型)不一致。然而,在您提供的代码片段中并没有直接看到div函数有重定义的情况。

    不过,这个问题很可能是由于外部因素导致的,比如在同一个项目中有另一个与当前文件作用域相同的声明或定义,其中div函数可能被定义为了不同类型的函数。例如,如果在其他头文件或源文件中有如下定义:

    int div(float, float); // 假设在某个头文件中有这样的声明或定义
    

    这将会与您提供的整数除法函数int div(int a, int b)产生冲突,因为它们的名字相同但参数类型不同。

    为了解决这个问题,请检查以下几点:

    1. 检查所有包含的头文件,确保没有其他同名函数div的声明或定义。
    2. 搜索整个项目,确认不存在任何其他div函数的实现,特别是那些参数类型不同的函数。
    3. 如果确实需要两个不同版本的div函数,可以考虑使用命名空间、命名约定(如添加前缀)或者将其中一个函数改名来避免冲突。

    根据您给出的代码段来看,只要这段代码是项目的全部相关部分,则不应该出现上述错误。请确保问题不是由于上下文环境中未展示的部分引起的。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 2月26日
  • 已采纳回答 2月18日
  • 修改了问题 2月18日
  • 创建了问题 2月18日

悬赏问题

  • ¥15 使用百度地图api 位置函数报错?
  • ¥15 metamask如何添加TRON自定义网络
  • ¥66 关于川崎机器人调速问题
  • ¥15 winFrom界面无法打开
  • ¥30 crossover21 ARM64版本安装软件问题
  • ¥15 mymetaobjecthandler没有进入
  • ¥15 mmo能不能做客户端怪物
  • ¥15 osm下载到arcgis出错
  • ¥15 Dell g15 每次打开eiq portal后3分钟内自动退出
  • ¥200 使用python编写程序,采用socket方式获取网页实时刷新的数据,能定时print()出来就行。