2016-03-27 3 views
1

массив символов определяется внутри структуры, как показано здесь:Дайте предопределенный 2-D массив символов значения

struct munchkin_grid_type 
{ 
    char grid[5][5]; 
}; 

Внутри другой функции, переменная определяется как нового типа, и я хочу массив символов внутри заполнены:

munchkin_grid_type munchkin_grid; 

munchkin_grid.grid[5][5] = 
{ 
     { 'a', 'b', 'c', 'd', 'e' }, 
     { ' ', ' ', ' ', ' ', ' ' }, 
     { ' ', ' ', ' ', ' ', ' ' }, 
     { ' ', ' ', ' ', ' ', ' ' }, 
     { '1', '2', '3', '4', '5' } 
}; 

ошибки я получаю:

  • ошибка C2440: '=': не может преобразовать сюда М «инициализатора-список» до «» полукокса

  • IntelliSense: слишком много инициализатора значения

Как поместить эти значения внутри этого массива 2-D, не прибегая к станду :: массив/вектора типы? Я просто хочу обычный 2D-массив символов.

ответ

1

Вместо

munchkin_grid_type munchkin_grid; 

munchkin_grid.grid[5][5] = 
{ 
    { 'a', 'b', 'c', 'd', 'e' }, 
    { ' ', ' ', ' ', ' ', ' ' }, 
    { ' ', ' ', ' ', ' ', ' ' }, 
    { ' ', ' ', ' ', ' ', ' ' }, 
    { '1', '2', '3', '4', '5' } 
}; 

сделать

munchkin_grid_type munchkin_grid = 
{ 
    { 
     { 'a', 'b', 'c', 'd', 'e' }, 
     { ' ', ' ', ' ', ' ', ' ' }, 
     { ' ', ' ', ' ', ' ', ' ' }, 
     { ' ', ' ', ' ', ' ', ' ' }, 
     { '1', '2', '3', '4', '5' } 
    } 
}; 

EDIT - как просили объяснить это.

По существу, это определение одного struct named munchkin_grid` с инициализатором. Чтобы понять это, выработайте из брекетов.

Один массив полукокса будет инициализирован что-то вроде

char x[5] = {'a', 'b', 'c', 'd', 'e'}; 

Двухмерный массив полукокса вводит другой вложенности {}.

char x[2][5] = { 
    {'a', 'b', 'c', 'd', 'e'}, 
    {'1', '2', '3', '4', '5'} 
    }; 

Я изменил первое измерение из вашего примера, так как с 5x5 менее ясно, каким образом размера для запуска инициализации. Если измерение обменивается, инициализатор также необходимо изменить, например;

char y[5][2] = { 
    {'a', 'b'}, 
    {'c', 'd'}, 
    {'e', '1'}, 
    {'2', '3'}, 
    {'4', '5'} 
    }; 

Тогда инициализация из структуры добавляет еще один уровень {} получить Инициализатор для munchkin_grid, как указано выше.

+0

Спасибо, что решил проблему. Не могли бы вы объяснить, почему это работает? – Akrilla

+0

Да, хорошо, я коротко отредактирую короткое объяснение. Слишком долго, чтобы добавлять комментарии. – Peter

-1

Код munchkin_grid.grid[5][5] = обращается к элементу массива (возможно, вы вводите в заблуждение синтаксис с другим языком ...) удаление [5][5] должно устранить вашу проблему.

EDIT: следующий код должен работать (по крайней мере, это не дало никаких ошибок IntelliSense ..)

#include <array> 
struct munchkin_grid_type 
{ 
    std::array<char, 5> grid[5]; 
}; 

munchkin_grid_type munchkin_grid; 

munchkin_grid.grid[0] = {'a', 'b', 'c', 'd', 'e' }; 
munchkin_grid.grid[1] = { ' ', ' ', ' ', ' ', ' ' }; 
munchkin_grid.grid[2] = { ' ', ' ', ' ', ' ', ' ' }; 
munchkin_grid.grid[3] = { ' ', ' ', ' ', ' ', ' ' }; 
munchkin_grid.grid[4] = { '1', '2', '3', '4', '5' }; 
+0

Нет, это не решит проблему. Вы не можете инициализировать (используя список инициализаторов) уже объявленный массив. – DimChtz

+0

@DimChtz как насчет сейчас? – Isaac

+0

Вы можете это сделать. Все еще неправильно – DimChtz

Смежные вопросы