2017-02-03 63 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; 
}