Я пытаюсь вернуть указатель на массив 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;
}
Может ли кто-нибудь объяснить мне, почему это происходит?
Это говорит вам, в чем проблема: char **
и ваш 2D-массив несовместимы. Тебе нужно:
char (*acBoard)[8] = new char[8][8];
И соответствующие изменения в другом месте. В качестве альтернативы вы можете изменить выделение, чтобы создать массив указателей на другие массивы.
Кроме того: C++ использует 0-индексированные массивы.
См. Ссылку о распределении 2D-массива с использованием нового.
Это гораздо проще понять, если вы это сделаете:
struct Board
{
char cells[8][8] ;
};
Board* create()
{
Board* board = new Board;
return board;
}
И, конечно, как только мы доберемся до этого, мы понимаем, что это C++, смените struct
на class
и сделайте ее подходящим объектом.