Почему возникает ошибка cannot convert ‘char (*)[8]’ to ‘char**’ in initialization?

Рейтинг: 1Ответов: 2Опубликовано: 22.04.2011
char **letters = new char[8][8];

x.cpp: In function ‘int main()’: x.cpp:2: error: cannot convert ‘char (*)[8]’ to ‘char**’ in initialization

Ответы

▲ 4

Оператор new возвращает указатель на массив char[8], поэтому и инициализируемая переменная должная быть char[8].

typedef char LETTERS[8];

LETTERS *letters = new char[8][8];
▲ 4

Вызов new char[8][8] создает двумерный массив типа char[8][8], и, как обычно, возвращает указатель на его первый элемент: на массив char[8]. То есть тип результата в данном случае - char (*)[8]. Тип char (*)[8] не имеет никакого отношения к вашему char **. Поэтому и возникает ошибка.

Правильно:

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