2014-01-07 103 views
-2

在這個項目中我試圖數組傳遞給我的播放器類,但我一直收到錯誤傳遞數組到類

1>project.obj : error LNK2019: unresolved external symbol "public: __thiscall Player::Player(int * 
const)" ([email protected]@[email protected]@Z) referenced in function _main 

在實際的程序我有類本身它自己的頭文件,我將它包含在我的程序中。然後我有另一個cpp文件,其中包含類播放器中函數的定義。這有意義嗎?反正我不知道我做錯了什麼。有任何想法嗎?

#include "stdafx.h" 
#include <iostream> 


using namespace std; 

class Player 
{ 
    public: 

    void moveUp(); 

    void moveDown(); 

    void moveRight(); 

    void moveLeft(); 

    Player(int b[16]); //create a variable to store the boardArray[] 

}; 

void moveUp() 
{ 

} 

void moveDown() 
{ 

} 

void moveRight() 
{ 

} 

void moveLeft() 
{ 

} 

int drawBoard (int boardArray[16]) //draw the game board 
{ 
    for (int i = 0; i < 16; i++) //use a for loop to simply draw the game board (4x4) 
    { 
     cout <<boardArray[i]; //ouput the storage id of the array 


     if (i == 3 || i == 7 || i == 11 || i == 15) //every 4 lines begin new line 
     { 
      cout <<"\n"; 
     } 

    } 

    return 0; 
} 

int main() 
{ 
    int bArray[16] = { 1, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0}; //create an array [16] 
    drawBoard(bArray); //send the aray to drawBoard() 

    Player p (bArray); //send the array to the Player class 


    char f; 
    cin >>f; 
} 
+0

這不是一個變量,而是一個構造函數。變量與以往一樣。 – chris

+0

在你的'Player'類中,你有一行說: 'Player(int b [16]);'它試圖用'int * const'調用播放器的構造函數,這正是錯誤消息正在指示。我認爲你有意從別處調用構造函數。無論哪種情況,您都需要爲'Player'定義構造函數。 – Eric

+0

你需要'Player :: Player','Player :: moveUp'等定義,當你定義'moveUp'時,編譯器不知道你打算把它和'Player'聯繫起來,除非你通過聲明'Player ::之前。 –

回答

0

免責聲明:下面的答案可能不是最終是你希望你的代碼做什麼,但它會給你一個很好的起點。

在這一行,它不是做什麼,您的評論狀態

Player(int b[16]); //create a variable to store the boardArray[] 

你所做的聲明構造函數取一個數組,但您尚未創建它。這個聲明需要與我將要實現的實現配對,但首先你需要聲明一個成員變量來存儲數組。

int mB[16]; 

現在你可以實現你的構造函數,我將只插入上述void moveUp()

Player::Player(int b[]) 
{ 
    // copy b into the member array 
    for(int i = 0; i < 16; i++) 
    { 
     mB[i] = b[i]; 
    } 
} 

現在你可以在你的move功能使用的mB [],而不必擔心B排列走出去的範圍,基本上意味着它不再有效,你不能再依賴它的內容。

最後,您的構造函數聲明不需要參數列表中的[16]。它應該看起來像這樣

Player(int b[]); 
+0

感謝這真的幫助@jmstoker – user3150762