2012-03-19 84 views
1

我正在嘗試編寫井字遊戲,但我收到編譯器錯誤。有3個與TTT::whoWins函數相關的錯誤。任何人都可以幫助我,或者指引我走向正確的方向。如何將託管數組傳遞給函數?

錯誤是:

Error 2 error C2664: 'TTT::checkColumn' : cannot convert parameter 1 from 'cli::array<Type,dimension> ^' to 'int [][3]' C:\Users\Grunt\Desktop\tictactoe game\tictactoe game\TTT.cpp 59 
Error 3 error C2664: 'TTT::checkDiagonal' : cannot convert parameter 1 from 'cli::array<Type,dimension> ^' to 'int [][3]' C:\Users\Grunt\Desktop\tictactoe game\tictactoe game\TTT.cpp 59 
Error 1 error C2664: 'TTT::checkRow' : cannot convert parameter 1 from 'cli::array<Type,dimension> ^' to 'int [][3]' C:\Users\Grunt\Desktop\tictactoe game\tictactoe game\TTT.cpp 59 

代碼如下所示:

TTT::TTT() 
{ 
    matrix = gcnew array <int,2>(3,3); 
} 

bool TTT::isaTie() 
{ 
    return 0; 
} 

bool TTT::isaTie2() 
{ 
    return 0; 
} 

int TTT::whoWins() 
{ 

    if((checkRow(matrix,ROW_SIZE))==1 || (checkColumn(matrix,COLUMN_SIZE))==1 || (checkDiagonal(matrix,ROW_SIZE))==1) 
     return 1; 
    else 
     return 0; 
} 


bool TTT::checkRow (int mat[][COLUMN_SIZE], int ROW_SIZE) 
{ 
    int row1 = mat[0][0] + mat[0][1] + mat [0][2]; 
    int row2 = mat[1][0] + mat[1][1] + mat [1][2]; 
    int row3 = mat[2][0] + mat[2][1] + mat [2][2]; 

    if (row1 == 0 || row2 == 0 || row3 == 0) 
    { 
     return 1; 
    } 
    else if (row1 == 3 || row2 == 3 || row3 == 3) 
    { 
     return 1; 
    } 
    else 
     return 0; 
} 
bool TTT::checkColumn (int mat[][COLUMN_SIZE], int ROW_SIZE) 
{ 
    int col1 = mat[0][0] + mat[1][0] + mat [2][0]; 
    int col2 = mat[0][1] + mat[1][1] + mat [2][1]; 
    int col3 = mat[0][2] + mat[1][2] + mat [2][2]; 

    if (col1 == 0 || col2 == 0 || col3 == 0) 
    { 
     return 1; 
    } 
    else if (col1 == 3 || col2 == 3 || col3 == 3) 
    { 
     return 1; 
    }else 
     return 0; 
} 

bool TTT::checkDiagonal (int mat[][COLUMN_SIZE], int ROW_SIZE) 
{ 
    int diag1 = mat[0][0] + mat[1][1] + mat [2][2]; 
    int diag2 = mat[2][0] + mat[1][1] + mat [0][2]; 

    if (diag1 == 0 || diag2 == 0) 
    { 
     return 1; 
    } 
    else if (diag1 == 3 || diag2 == 3) 
    { 
     return 1; 
    }else 
     return 0; 
} 

回答

0

在你matrix類是在你的功能(例如checkRow)的第一個參數是int類型的array類型,但是。所以你需要將其更改爲array

另一方面,你的check *函數是TTT的一部分,所以他們可以直接訪問矩陣,不需要它作爲參數。

+0

我試過了,它只是給了我更多的錯誤。你能給我更詳細的信息嗎? – 2012-03-19 14:09:42

+0

我建議你閱讀:http://www.codeproject.com/Articles/7704/Arrays-in-C-CLI,應該解決你的問題。 – Azrael3000 2012-03-19 14:26:18

0

我不夠專業知道如何做到這一點,但我知道一種方法是製作另一個指針數組並將其與數組鏈接,並使用它而不是直接使用數組。另一種方法是全局聲明數組。爲了全局聲明數組,它不必在任何函數中,並且聲明一個int數組就可以像(int * x [10])那樣。

我希望對您有所幫助:)

0

我覺得你有與被認識到一個CLI GC對象,如數組^是不是都一樣的C++風格陣列的麻煩。你不能交換它們。它們的佈局完全不同,任何CLI類型都位於可移動內存中,具有某些方法等,而C++數組只是一塊內存。在C++/CLI中,您可以選擇使用任何一種類型的對象,但由於您似乎等待使用gc對象,因此我在下面編輯了您的代碼以使用它。語法有點不同,你使用array ^作爲你的函數參數(引用一個int的二維數組)。然後,您可以像C++中那樣使用CLI風格的索引編址來尋址數組,例如[0,1]而不是[0] [1]。不知道爲什麼你有ROW_SIZE和COLUMN_SIZE,因爲你沒有使用它們,所以我刪除了它們。

public ref class TTT 
{ 
public: 
    array<int, 2>^ matrix; 

TTT::TTT() 
{ 
    matrix = gcnew array <int,2>(3, 3); 
} 

bool TTT::isaTie() 
{ 
    return 0; 
} 

bool TTT::isaTie2() 
{ 
    return 0; 
} 

int TTT::whoWins() 
{ 
    if ((checkRow(matrix))==1 || (checkColumn(matrix))==1 || (checkDiagonal(matrix))==1) 
     return 1; 
    else 
     return 0; 
} 


bool TTT::checkRow(array<int, 2>^ mat) 
{ 
    int row1 = mat[0,0] + mat[0,1] + mat[0,2]; 
    int row2 = mat[1,0] + mat[1,1] + mat[1,2]; 
    int row3 = mat[2,0] + mat[2,1] + mat[2,2]; 

    if (row1 == 0 || row2 == 0 || row3 == 0) 
    { 
     return 1; 
    } 
    else if (row1 == 3 || row2 == 3 || row3 == 3) 
    { 
     return 1; 
    } 
    else 
     return 0; 
} 
bool TTT::checkColumn (array<int, 2>^ mat) 
{ 
    int col1 = mat[0,0] + mat[1,0] + mat[2,0]; 
    int col2 = mat[0,1] + mat[1,1] + mat[2,1]; 
    int col3 = mat[0,2] + mat[1,2] + mat[2,2]; 

    if (col1 == 0 || col2 == 0 || col3 == 0) 
    { 
     return 1; 
    } 
    else if (col1 == 3 || col2 == 3 || col3 == 3) 
    { 
     return 1; 
    }else 
     return 0; 
} 

bool TTT::checkDiagonal (array<int, 2>^ mat) 
{ 
    int diag1 = mat[0,0] + mat[1,1] + mat[2,2]; 
    int diag2 = mat[2,0] + mat[1,1] + mat[0,2]; 

    if (diag1 == 0 || diag2 == 0) 
    { 
     return 1; 
    } 
    else if (diag1 == 3 || diag2 == 3) 
    { 
     return 1; 
    }else 
     return 0; 
} 

};