2012-02-09 149 views
1

的錯誤逐字讀LNK2019錯誤,無法解析的外部符號

1>yes.obj : error LNK2019: unresolved external symbol "int __cdecl availableMoves(int *  const,int (* const)[4],int)" ([email protected]@[email protected]) referenced in function "void __cdecl solveGame(int * const,int (* const)[4])" ([email protected]@[email protected]) 

我以前從來沒見過這個錯誤。以下是我認爲它指的兩個功能。

int availableMoves(int a[15], int b[36][3],int openSpace){ 
    int count=0; 
    for(int i=0; i<36;i++){ 
     if(i < 36 && b[i][2] == openSpace && isPeg(b[i][0],a) && isPeg(b[i][1],a)){ 
      count++; 
     } 
    } 
    return count; 
} 

void solveGame(int a[15], int b[36][4]) { 
    int empSpace; 
    int movesLeft; 
    if(pegCount(a) < 2) { 
     cout<<"game over"<<endl; 
    } else { 
     empSpace = findEmpty(a); 
     if(movesLeft = availableMoves(a,b,empSpace) < 1) { 
      temp[index] = empSpace; 
      d--; 
      c[d][0] = 0; 
      c[d][1] = 0; 
      c[d][2] = 0; 
      c[d][3] = 0; 
      a[b[c[d][3]][0]] = 1; 
      a[b[c[d][3]][0]] = 1; 
      a[b[c[d][3]][0]] = 0; 
      b[c[d][3]][3] = 0; 
      index++; 
     } else if(movesLeft >= 1) { 
      chooseMove(a, b, empSpace); 
      index = 0; 
      for(int i=0; i<4; i++) { 
       temp[i] = -1; 
      } 
     } 
     d++; 
     solveGame(a, b); 
    } 
} 

回答

3

您當前的聲明不符合定義。

你可能已經聲明瞭函數availableMoves()然後再使用它,但你實現不同的功能:

int availableMoves(int* const a, int (* const)[4] , int); 


//.... 
//.... 
//.... 
//code that uses available moves 


int availableMoves(int a[15], int b[36][3],int openSpace) 
{ 
    //.... 
} 

由於編譯器認爲該聲明首先,它會用它來解決該塊中的通話的代碼。但是,該函數不會導出,因爲它具有不同的簽名。

+0

Ahhh darn,我忘了更改它。謝謝你的收穫! – Sam 2012-02-10 00:06:53

+0

@Sam那是它嗎?誠實地猜測,最近發生在我身上。當我在聲明中遺漏了一個'const'時,半個小時我正在查看'.lib'文件。 :) – 2012-02-10 00:10:03

+0

是的,你懂了,嘿嘿。 – Sam 2012-02-10 00:16:35

0
在解決遊戲

b[36][4] 

在可移動

b[36][3] 

可能產生問題。

0

不錯的一個:你使用不兼容的數組維度!注意錯誤消息的部分內容

availableMoves(int *const,int (*const)[4],int) 

雖然availableMoves()的定義是這樣的:

int availableMoves(int a[15], int b[36][3],int openSpace) 

雖然參數的第一維被忽略,所有其他方面都完全匹配。您嘗試使用不兼容的尺寸調用此功能,但是:

void solveGame(int a[15], int b[36][4]){ 
    ... 
    ... availableMoves(a,b,empSpace) ... 
相關問題