0

2d char 配列へのポインターを返そうとしています (主に、ポインターをまだよく理解していないため、ポインターを使用する練習のためだけです)。

これをコンパイルすると、次のメッセージが表示されます。

Maze Game.cpp(32): error C2440: 'initializing' : cannot convert from 'char (*)[8]' to 'char **'

32 行目は次のとおりです。

char** acBoard = new char[8][8];

ソースコードは次のとおりです。

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

char** createGrid();

int main()
{
    using namespace std;

    char** pBoard = createGrid();
    char gameBoard[8][8];

    for(int row = 0; row < 8; row++) {
        int count = 0;
        for(int col = 0; col < 8; col++) {
            char temp = **pBoard + count;
            gameBoard[row][col] = temp;
            cout << gameBoard[row][col];
        }
        cout << endl;
    }
    delete pBoard;
    pBoard = 0;

    return 0;
}





char** createGrid()
{
    char** acBoard = new char[8][8];
        //Set wall positions
    acBoard[1][6] = 'X';            
    acBoard[1][7] = 'X';
    acBoard[3][4] = 'X';
    acBoard[3][6] = 'X';
    acBoard[3][8] = 'X';
    acBoard[4][1] = 'X';
    acBoard[4][3] = 'X';
    acBoard[4][4] = 'X';
    acBoard[4][5] = 'X';
    acBoard[4][6] = 'X';
    acBoard[4][7] = 'X';
    acBoard[5][1] = 'X';
    acBoard[5][3] = 'X';
    acBoard[5][4] = 'X';
    acBoard[5][8] = 'X';
    acBoard[6][1] = 'X';
    acBoard[6][2] = 'X';
    acBoard[6][3] = 'X';
    acBoard[6][6] = 'X';
    acBoard[6][8] = 'X';
    acBoard[7][1] = 'X';
    acBoard[7][5] = 'X';
    acBoard[7][6] = 'X';
    acBoard[7][8] = 'X';
    acBoard[8][3] = 'X';
    acBoard[8][5] = 'X';
    acBoard[8][6] = 'X';
    acBoard[8][7] = 'X';
    acBoard[8][8] = 'X';

    acBoard[1][8] = 'N';
    acBoard[7][7] = 'T';
    acBoard[5][2] = 'W';
    acBoard[2][2] = '$';

    return acBoard;

}

なぜこれが起こっているのか誰にも説明できますか?

4

2 に答える 2

1

問題が何であるかを正確に伝えていchar **ます.2D配列は互換性のある型ではありません. 必要なもの:

char (*acBoard)[8] = new char[8][8];

そして、対応する他の場所の変更。または、割り当てを変更して、他の配列へのポインターの配列を作成することもできます。

余談: C++ は 0 から始まる配列を使用します。

于 2013-10-09T00:40:30.823 に答える
1

new を使用した 2D 配列の割り当てに関するリンクを参照してください。

これを行うと、理解がはるかに簡単になります。

struct Board
{
    char cells[8][8] ;
};

Board* create()
{
    Board* board = new Board;
    return board;
}

もちろん、ここまで来るとすぐに、これが C++ であることに気づき、適切なオブジェクトに変更structして作成します。class

于 2013-10-09T00:46:55.440 に答える