2012-03-19 8 views
1

私はTic-Tac-Toeゲームを書こうとしていますが、コンパイラエラーが発生しています。 TTT::whoWins関数に関連する3つのエラーがあります。誰でも私を助け、正しい方向に向けることができますか?管理対象配列を関数に渡すにはどうすればよいですか?

エラーは以下のとおりです。

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 

コードを以下に示します:あなたのクラス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,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

はタイプarrayのが、あなたの最初の引数はタイプintである(例えばcheckRow)あなたの関数です。したがって、これをarrayに変更する必要があります。

一方、チェック*機能はTTTの一部であるため、マトリックスに直接アクセスでき、引数として必要としません。

+0

私はそれを試してみると、もっとエラーが出ます。あなたは私に詳細な情報をくれますか? –

+0

私はあなたの問題を解決するはずです:http://www.codeproject.com/Articles/7704/Arrays-in-C-CLIを読むことをお勧めします。 – Azrael3000

0

私はそれを行う方法を知るには十分ではありませんが、ポインターの別の配列を作成して配列にリンクし、配列を直接使用する代わりに使用する方法を学びました。別の方法は、配列をグローバルに宣言することです。配列をグローバルに宣言するためには、関数には含まれておらず、int配列(例えば、int * x [10])を宣言する必要があります。

私はそれが役に立つことを願っ:)

0

私はあなたがそのような配列としてCLIのGCオブジェクトは^ C++スタイルの配列として、すべて同じではないことを実現しているとのトラブルを抱えていると思う何を。あなたはそれらを交換することはできません。それらは完全に異なってレイアウトされており、どのCLIタイプも可動メモリ内にあり、特定のメソッドなどを持っていますが、C++配列は単なるメモリブロックです。 C++/CLIではどちらのタイプのオブジェクトを使用するかを選択できますが、gcオブジェクトを使用するのを待っていたので、私はコードを編集して使用しました。構文は少し異なります。関数のパラメータとしてarray ^を使用します(intの2次元配列への参照)。次に、C++で使用するように、[0,1] [0] [1]ではなく、CLIスタイルのインデックスを使用して配列を指定します。あなたが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; 
} 

}; 
関連する問題