2017-02-03 321 views
-1

你好,我收到了关于我的函数的错误 - 说它是未定义的,我不明白编译器真的想要什么。不,我不能使用数组,所以我在制作全局变量时遇到了麻烦,所以必须这样做。生成以下错误消息,当我运行此:函数错误'redefined'

错误4错误C2371:'moveHandler':重新定义;不同的基本类型C:\用户\业主\的文档\的Visual Studio 2012 \项目\ 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); 
+0

噢,我的...这是最长的参数列表我见过.. –

+0

15板块+ 2其他发言,抱歉。 –

+0

有没有听说过阵列和/或结构? –

回答

4

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

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

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; 
}