c语言-error C2371: “f”: 重定义;不同的基类型 求助

问题描述

error C2371: “f”: 重定义;不同的基类型 求助
 #include<stdio.h>

main()
{
int a,b,c,d;
a=4;b=3;
f(a,b,&c,&d);
printf("%d
",c+d);
}

void f(int x,int y, int *cp, int *dp)
{
    *cp=x+y; *dp=x-y;
    return;
}

代码如上时,程序报错,“重定义。不同的基类型”,而如果将void函数与main函数交换位置(如下),则运行正常,请问这是为什么,“f”: 重定义;不同的基类型,这是什么意思?

解决方案

先声明,后使用,以方便编译器识别出,
函数的返回值类型,参数类型,参数个数,调用约定 等信息
从而实现 函数调用时,的参数和返回值的匹配(以及调用约定等的匹配)

解决方案二:

函数的调用要在定义/声明之后

解决方案三:

错误描述:新定义了一个函数,可以编译运行通过;但是在调用此函数时出现此错误。
原因,函数定义在后,调用在前;应该在调用前进行声明。......
答案就在这里:error C2371: “pCopyState”: 重定义;不同的基类型

解决方案四:

函数调用之前要有函数的声明或定义。

时间: 2024-08-01 22:11:56

c语言-error C2371: “f”: 重定义;不同的基类型 求助的相关文章

vs2010 c2371 重定义-新手求教vs2010错误提示error C2371: “UNICODE_STRING”: 重定义;不同的基类型

问题描述 新手求教vs2010错误提示error C2371: "UNICODE_STRING": 重定义:不同的基类型 有以下两个定义:typedef struct UNICODE_STRING { USHORT Length;//长度 USHORT MaximumLength;//最大长度 PWSTR Buffer;//缓存指针 } UNICODE_STRING*PUNICODE_STRING; 还有#ifndef _NTDEFtypedef LSA_UNICODE_STRING

单元测试-C语言 应该怎么修改宏定义 在函数5执行之后,打印错误error 函数6也能执行

问题描述 C语言 应该怎么修改宏定义 在函数5执行之后,打印错误error 函数6也能执行 这是函数5static char * test_replace(){Link_t head;head = LinkTable_new();Link_t temp3 =Link_replace(head101""cpp101"");int number4;if(temp3 != NULL){number4 =2;}else{number4 =0;}if(number4 == 1

基于C++类型重定义的使用详解_C 语言

这几天工作时碰到一个C++的编译错误(我使用的是Visual C++ 7.0),说是有一个类重复定义,仔细想想我们的这个项目也是做了好几个Release了, 内部代码应该不会有这样的低级错误, 真把类型给重复定义了,检查结果正如我预料的一样. 就这样, 我左右没找到原因,被一个编译错误给卡在那里了.(在我的概念中, 程序错误的等级为:编译错误->链接错误->逻辑错误, 此错误属于最低级 ).这时我仔细看了一下错误提示, 发现重复定义是由于从两个不同的路径包含了同一个头文件而引起的,同事也建议从

error C2011: “CPushRoutingFrame”: “class”类型重定义

问题描述 在一个工程中,我引用了两个文件,分别为afxPriv.h和afxImpl.h,这两个头文件中都有CPushRoutingFrame这个类,所以在编译的时候会提示errorC2011:"CPushRoutingFrame":"class"类型重定义,这种情况下,这个问题如何解决? 解决方案 解决方案二:删掉一个呗.解决方案三:引用1楼Z65443344的回复: 删掉一个呗. afxPriv.h和afxImpl.h是VS系统提供的头文件,如果删掉了,别的工程如

解决C++中重定义的方法总结_C 语言

C++由于头文件重复包含了所定义的变量或者常量,编译器就会报重复定义的错误.如果你碰见这样的问题可以考虑重下面几个方面去解决: 1.在出现重定义错误的头文件加上:#ifndef FileName_H_#define FileName_H_ ....(头文件内容)#endif注意如果FileName_H_这个名字已经被使用,将会出现未定义问题(这里不讨论),这是你保证FileName_H_唯一就可以. 2.在出现重定义错误的头文件加上这一句:#pragma once 就可以解决(VS建立的类都会默

vc-VC 两个文件包涵同一个头文件 提示变量重定义

问题描述 VC 两个文件包涵同一个头文件 提示变量重定义 总共四个文件.分别是定义main函数的text.cpp定义了一个类 的 a.cpp和a.h还有一个b.h text.cpp代码 #include ""a.h"" #include ""b.h""int main(){ //some code} a.h代码 #pragma onceclass Ca{ //some code}; a.cpp代码 #include "

Oracle在线重定义失败后的处理

普通表在线重定义为分区表过程中报错,数值范围超过了分区限制大小,那么想要重新对表进行在线重定义需要经过哪些步骤呢?这个例子记录了处理过程: SALES@ORCL>exec dbms_redefinition.start_redef_table('SALES', 'SALES', 'SALES_P'); BEGIN dbms_redefinition.start_redef_table('SALES', 'SALES', 'SALES_P'); END; * ERROR at line 1: OR

oracle在线重定义拷贝表结构的NOT NULL约束问题

以前测试和使用的时候还真的没发现这个问题,一直认为COPY_TABLE_DEPENDENTS会自动过滤NOT NULL约束. 然而事实并发如此,如果打算使用COPY_TABLE_DEPENDENTS过程复制索引.约束以及权限等相关对象,那么在建立目标表的时候,即使是NOT NULL约束都应该避免,否则NOT NULL约束的存在会引发错误: SQL> CREATE TABLE T AS 2  SELECT ROWNUM ID, OBJECT_NAME NAME, OBJECT_TYPE TYPE

【Oracle】在线重定义表

Oracle从9i版本开始提供了在线重定义表功能,通过调用DBMS_REDEFINITION包,可以在修改表结构的同时允许DML操作. 在线重定义表具有以下功能: 1 修改表的存储参数 2 可以将表转移到其他表空间 3 增加并行查询选项 4 增加或删除分区 5 重建表以减少碎片 6 将堆表改为索引组织表或相反的操作 7 增加或删除一个列 调用DBMS_REDEFINITION包需要EXECUTE_CATALOG_ROLE角色和以下权限: CREATE ANY TABLE ALTER ANY TA