功能错误'重新定义'

时间:2017-02-03 21:19:22

标签: c function arguments

您好我的功能有误 - 说它未定义,我无法理解编译器的真正需求。不,我不能使用数组,而且我在制作全局变量方面遇到了麻烦,因此必须以这种方式完成。运行此命令时会产生以下错误消息:

  

错误4错误C2371:' moveHandler' :重新定义;不同的基本类型c:\ users \ owner \ documents \ visual studio 2012 \ projects \ project36 \ project36 \ source.c 120 1 Project36

功能定义:

   void moveHandler( char source, char destination, char *pa, char *pb, char *pc, char *pd, char *pe, char *pf,
                     char *pg, char *ph, char *pi, char *pj, char *pk, char *pl, char *pm, char *pn, char *po ) {
                         char temp;

                         if ( source == 'D' && destination == 'A' ) {
                             temp = *pa;
                             *pa = *pd;
                             *pd = temp;
                         }
    return;
    }

函数调用:

moveHandler( sourcePiece, destination, &pa, &pb, &pc, &pd, &pe, &pf, &pg, &ph, &pi, &pj, &pk, &pl, &pm, &pn, &po); 

2 个答案:

答案 0 :(得分:4)

您正在C代码中调用未声明的函数。确保在尝试调用它们之前声明C函数(带原型)。

在提出问题之前尝试搜索SO是有道理的。搜索“重新定义;不同的基本类型”会立即为您提供各种各样的答案。

答案 1 :(得分:0)

如果你调用编译器无法找到或不知道的函数,它会假定它只是从其他地方链接到的(比如,链接器将处理的其他一些库) ),并返回int

如果稍后在之后定义函数,编译器已经看到它被调用(但未在代码中定义或声明),编译器将抛出重定义错误,因为它已经确定函数必须在外部存在并返回int

要解决此问题,请在定义任何函数之前声明所有函数:

为:

#include <stdio.h>
int main()
{
     printf("%d\n", add2(5, 6));
     return 0;
}
int add2(int a, int b)
{
     return a + b;
}

好:

#include <stdio.h>
int add2(int a, int b);
int main()
{
     printf("%d\n", add2(5, 6));
}
int add2(int a, int b)
{
     return a + b;
}