Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / C++ Новый топик    Ответить
 помогите инициализировать двухмерный массив  [new]
andron81
Member

Откуда: Смоленск
Сообщений: 1106
почему закоменченный код не рабочий, тогда как подобный код только с примитивным типом рабочий ?




#include <iostream>
#include <memory>
#include <vector>
constexpr int X = 6; // row qty
constexpr int Y = 5; // column qty

struct prasetoReplace {
	std::wstring find;
	std::wstring replace;
};

// это не рабочий код:

/*
const std::array <std::array<prasetoReplace, X>, Y> aaa =
{
    {L"1 ракушек", L"1 ракушку"},{L"1 ракушек", L"1 ракушку"},{L"1 ракушек", L"1 ракушку"},{L"1 ракушек", L"1 ракушку"},{L"1 ракушек", L"1 ракушку"}
    {L"1 ракушек", L"1 ракушку"},{L"1 ракушек", L"1 ракушку"},{L"1 ракушек", L"1 ракушку"},{L"1 ракушек", L"1 ракушку"},{L"1 ракушек", L"1 ракушку"},
    {L"1 ракушек", L"1 ракушку"},{L"1 ракушек", L"1 ракушку"},{L"1 ракушек", L"1 ракушку"},{L"1 ракушек", L"1 ракушку"},{L"1 ракушек", L"1 ракушку"},
    {L"1 ракушек", L"1 ракушку"},{L"1 ракушек", L"1 ракушку"},{L"1 ракушек", L"1 ракушку"},{L"1 ракушек", L"1 ракушку"},{L"1 ракушек", L"1 ракушку"},
    {L"1 ракушек", L"1 ракушку"},{L"1 ракушек", L"1 ракушку"},{L"1 ракушек", L"1 ракушку"},{L"1 ракушек", L"1 ракушку"},{L"1 ракушек", L"1 ракушку"},
    {L"1 ракушек", L"1 ракушку"},{L"1 ракушек", L"1 ракушку"},{L"1 ракушек", L"1 ракушку"},{L"1 ракушек", L"1 ракушку"},{L"1 ракушек", L"1 ракушку"}
 }; */
 // А это рабочий код , всего лишь тип данных проще(int вместо prasetoReplace) :
const std::array <std::array<int, X>, Y> INT0 = { 
    5,7,3,1,1,
    5,7,3,1,1,
    5,7,3,1,1,
    5,7,3,1,1,
    5,7,3,1,1,
    5,7,3,1,1
};



int main()
{
    
    return 0;
}
20 май 21, 14:15    [22324744]     Ответить | Цитировать Сообщить модератору
 Re: помогите инициализировать двухмерный массив  [new]
Anatoly Moskovsky
Member

Откуда: Odessa
Сообщений: 6658
andron81,

"," не хватает в конце первой строки
20 май 21, 14:44    [22324766]     Ответить | Цитировать Сообщить модератору
 Re: помогите инициализировать двухмерный массив  [new]
andron81
Member

Откуда: Смоленск
Сообщений: 1106
Anatoly Moskovsky,

согласен, очепятка. но проблему не решило :(
20 май 21, 14:49    [22324771]     Ответить | Цитировать Сообщить модератору
 Re: помогите инициализировать двухмерный массив  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 53394

Может, стоит текст сообщения об ошибке прочитать?..

Posted via ActualForum NNTP Server 1.5

20 май 21, 14:54    [22324773]     Ответить | Цитировать Сообщить модератору
 Re: помогите инициализировать двухмерный массив  [new]
andron81
Member

Откуда: Смоленск
Сообщений: 1106
Dimitry Sibiryakov,


да читал: слишком много инициализоторов для const std::array<std::array<prasetoReplace, 6>, 5>

а почему много то ??? 6 строк, 5 столбцов. Да и для инта ж работает.
20 май 21, 15:01    [22324778]     Ответить | Цитировать Сообщить модератору
 Re: помогите инициализировать двухмерный массив  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 53394

Ты в array из пяти элементов пытаешься всунуть 30 массивов.

Posted via ActualForum NNTP Server 1.5

20 май 21, 15:10    [22324780]     Ответить | Цитировать Сообщить модератору
 Re: помогите инициализировать двухмерный массив  [new]
andron81
Member

Откуда: Смоленск
Сообщений: 1106
Dimitry Sibiryakov

Ты в array из пяти элементов пытаешься всунуть 30 массивов.



так что ли надо ? )))
const std::array <std::array<prasetoReplace, X>, Y> aaa =
{
    (L"1 ракушек", L"1 ракушку"), (L"1 ракушек", L"1 ракушку"), (L"1 ракушек", L"1 ракушку"), (L"1 ракушек", L"1 ракушку"), (L"1 ракушек", L"1 ракушку"),
    (L"1 ракушек", L"1 ракушку"), (L"1 ракушек", L"1 ракушку"), (L"1 ракушек", L"1 ракушку"), (L"1 ракушек", L"1 ракушку"), (L"1 ракушек", L"1 ракушку"),
    (L"1 ракушек", L"1 ракушку"), (L"1 ракушек", L"1 ракушку"), (L"1 ракушек", L"1 ракушку"), (L"1 ракушек", L"1 ракушку"), (L"1 ракушек", L"1 ракушку"),
    (L"1 ракушек", L"1 ракушку"), (L"1 ракушек", L"1 ракушку"), (L"1 ракушек", L"1 ракушку"), (L"1 ракушек", L"1 ракушку"), (L"1 ракушек", L"1 ракушку"),
    (L"1 ракушек", L"1 ракушку"), (L"1 ракушек", L"1 ракушку"), (L"1 ракушек", L"1 ракушку"), (L"1 ракушек", L"1 ракушку"), (L"1 ракушек", L"1 ракушку"),
    (L"1 ракушек", L"1 ракушку"), (L"1 ракушек", L"1 ракушку"), (L"1 ракушек", L"1 ракушку"), (L"1 ракушек", L"1 ракушку"), (L"1 ракушек", L"1 ракушку")
 };
20 май 21, 15:18    [22324790]     Ответить | Цитировать Сообщить модератору
 Re: помогите инициализировать двухмерный массив  [new]
Anatoly Moskovsky
Member

Откуда: Odessa
Сообщений: 6658
andron81,

Там просто больше скобочек надо чем вы думаете, потому что инициализируется внутренний массив в std::array. Поэтому надо на каждом уровне вложенности std::array добавлять скобки.

struct S
{
    std::string a;
    std::string b;
};

const std::array<std::array<S, 2>, 2> aaa = {
  {
    {
      {
        {"", ""},
        {"", ""},
      }
    },
    {
      {
        {"", ""},
        {"", ""},
      }
    }
  }
};


Либо не извращаться и перечислить все в одном плоском инициализаторе:

struct S
{
    std::string a;
    std::string b;
};

const std::array<std::array<S, 2>, 2> aaa = {"", "", "", "", "", "", "", ""};


Сообщение было отредактировано: 20 май 21, 15:14
20 май 21, 15:20    [22324791]     Ответить | Цитировать Сообщить модератору
 Re: помогите инициализировать двухмерный массив  [new]
andron81
Member

Откуда: Смоленск
Сообщений: 1106
Anatoly Moskovsky
andron81,

Там просто больше скобочек надо чем вы думаете, потому что инициализируется внутренний массив в std::array. Поэтому надо на каждом уровне вложенности std::array добавлять скобки.

struct S
{
    std::string a;
    std::string b;
};

const std::array<std::array<S, 2>, 2> aaa = {
  {
    {
      {
        {"", ""},
        {"", ""},
      }
    },
    {
      {
        {"", ""},
        {"", ""},
      }
    }
  }
};


Либо не извращаться и перечислить все в одном плоском инициализаторе:

struct S
{
    std::string a;
    std::string b;
};

const std::array<std::array<S, 2>, 2> aaa = {"", "", "", "", "", "", "", ""};


а как второй вариант понять ?

вот есть 2 элемента {L"элемент1", L"Элемент10"} и {L"элемент2", L"Элемент20"}

как их вставить ?
20 май 21, 15:25    [22324793]     Ответить | Цитировать Сообщить модератору
 Re: помогите инициализировать двухмерный массив  [new]
Anatoly Moskovsky
Member

Откуда: Odessa
Сообщений: 6658
andron81,

Все через запятую без {}.
{} только вокруг всего списка.
20 май 21, 15:31    [22324794]     Ответить | Цитировать Сообщить модератору
 Re: помогите инициализировать двухмерный массив  [new]
andron81
Member

Откуда: Смоленск
Сообщений: 1106
Anatoly Moskovsky,

так каждый ведь элемент это структура . каждый элемент тоже не обрамляет фигурными ???

Сообщение было отредактировано: 20 май 21, 15:28
20 май 21, 15:36    [22324798]     Ответить | Цитировать Сообщить модератору
 Re: помогите инициализировать двухмерный массив  [new]
Anatoly Moskovsky
Member

Откуда: Odessa
Сообщений: 6658
andron81,

{} не обязательны. Но если их ставить они должны соответствовать структуре всех уровней вложенности, а не только нижнего уровня.
20 май 21, 15:40    [22324802]     Ответить | Цитировать Сообщить модератору
 Re: помогите инициализировать двухмерный массив  [new]
andron81
Member

Откуда: Смоленск
Сообщений: 1106
Anatoly Moskovsky
andron81,

{} не обязательны. Но если их ставить они должны соответствовать структуре всех уровней вложенности, а не только нижнего уровня.


не обязательны? то есть могу поставить ??? вот я и поставил в первом посте. обратив каждый элемент в фигурные скобки. видимо обязательно не ставить !

Сообщение было отредактировано: 20 май 21, 15:45
20 май 21, 15:44    [22324804]     Ответить | Цитировать Сообщить модератору
 Re: помогите инициализировать двухмерный массив  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 53394

andron81
вот я и поставил в первом посте. обратив каждый элемент в фигурные скобки.

Не каждый. Ты обернул два вложенных элемента из трёх. И именно в этом твоя ошибка. О чём
уже было сказано выше.

Posted via ActualForum NNTP Server 1.5

20 май 21, 17:39    [22324906]     Ответить | Цитировать Сообщить модератору
 Re: помогите инициализировать двухмерный массив  [new]
бабушкин зайчик
Member

Откуда: сетевой
Сообщений: 205
а constexpr при инициализации обычного инта точно нужен?
20 май 21, 18:19    [22324917]     Ответить | Цитировать Сообщить модератору
 Re: помогите инициализировать двухмерный массив  [new]
andron81
Member

Откуда: Смоленск
Сообщений: 1106
Dimitry Sibiryakov

andron81
вот я и поставил в первом посте. обратив каждый элемент в фигурные скобки.

Не каждый. Ты обернул два вложенных элемента из трёх. И именно в этом твоя ошибка. О чём
уже было сказано выше.


/*
const std::array <std::array<prasetoReplace, X>, Y> aaa =
{
    {L"1 ракушек", L"1 ракушку"},{L"1 ракушек", L"1 ракушку"},{L"1 ракушек", L"1 ракушку"},{L"1 ракушек", L"1 ракушку"},{L"1 ракушек", L"1 ракушку"},
    {L"1 ракушек", L"1 ракушку"},{L"1 ракушек", L"1 ракушку"},{L"1 ракушек", L"1 ракушку"},{L"1 ракушек", L"1 ракушку"},{L"1 ракушек", L"1 ракушку"},
    {L"1 ракушек", L"1 ракушку"},{L"1 ракушек", L"1 ракушку"},{L"1 ракушек", L"1 ракушку"},{L"1 ракушек", L"1 ракушку"},{L"1 ракушек", L"1 ракушку"},
    {L"1 ракушек", L"1 ракушку"},{L"1 ракушек", L"1 ракушку"},{L"1 ракушек", L"1 ракушку"},{L"1 ракушек", L"1 ракушку"},{L"1 ракушек", L"1 ракушку"},
    {L"1 ракушек", L"1 ракушку"},{L"1 ракушек", L"1 ракушку"},{L"1 ракушек", L"1 ракушку"},{L"1 ракушек", L"1 ракушку"},{L"1 ракушек", L"1 ракушку"},
    {L"1 ракушек", L"1 ракушку"},{L"1 ракушек", L"1 ракушку"},{L"1 ракушек", L"1 ракушку"},{L"1 ракушек", L"1 ракушку"},{L"1 ракушек", L"1 ракушку"}
 }; */


какие я обернул 2 элемента из 3 х ?

Сообщение было отредактировано: 20 май 21, 19:01
20 май 21, 19:05    [22324935]     Ответить | Цитировать Сообщить модератору
 Re: помогите инициализировать двухмерный массив  [new]
бабушкин зайчик
Member

Откуда: сетевой
Сообщений: 205
две скобки { открыты
20 май 21, 19:06    [22324936]     Ответить | Цитировать Сообщить модератору
Все форумы / C++ Ответить