C ++ std :: vector, статическая инициализация - PullRequest
0 голосов
/ 13 ноября 2018

Я работаю над проектом, который включает переменную-член в определении класса:

    static std::vector < std::vector < std::vector < UINT16 > > >  m_vectors;

Это похоже на трехмерный массив беззнаковых 16-битных целых чисел.

В настоящее времяИнициализация для этого выполняется путем создания нескольких массивов UINT16 и последующей передачи их в m_vectors с помощью memcpy.

Я ищу способ выполнить эту инициализацию в файле cpp, что-то вроде:

    std::vector < std::vector < std::vector < UINT16 > > > cname::m_vectors = 
    {1,2,3},{4,5,6},{7,8,9},{10,11,12};

Данные только для иллюстрации, возможно ли это?

Редактировать: Используя Qt, я попробовал следующее:

    std::vector < std::vector < std::vector < int > > > test{{{1,2,3,4,5},{6,7,8,9,10}}};

Построить и запустить в отладчике, это сработало отлично, яотправлю этот тест по электронной почте самому себе и завтра буду тестировать систему разработки. Я использую MSVC 2010 в системе разработки.

Edit.2 Я только что попробовал ту же логику в своей системе разработки, это работает под управлением Windows7 [6.1.7601] и Microsoft Visual Studio [10.0.40219.1 SP1Rel] с Microsoft Visual C ++ 2010 [01018-532-2002181-70881]

В моих классахУ меня есть заголовок s:

    static std::vector < std::vector < std::vector < UINT16 > > > m_vectors;

В моем файле cpp:

    std::vector < std::vector < std::vector < UINT16 > > > cname:m_vectors{{{
    0x01,0x02,0x03}}};

Данные приведены только в качестве примера, но формат тот же.Когда я компилирую, я получаю:

    error C2470: 'cname:m_vectors' : looks like a function definition,  but there is no parameter list; skipping apparent body

Та же самая логика, которая почти такая же, как и у первого Edit, который был на моем MacBook Pro под управлением iOS, а Qt 5.11 компилируется и работает.

I 'Теперь я думаю, что это больше проблема MSVC 2010, а не синтаксис.

1 Ответ

0 голосов
/ 13 ноября 2018

Конечно, это возможно.

static std::vector<std::vector<std::vector<UINT16>>> m_vectors{
                  {
                    {1, 2, 3}, {1, 3, 3}
                  },
                  {
                    {3, 5, 6}, {3, 5, 6}
                  }
};

Используется инициализация списка std::vector - подробнее см. https://en.cppreference.com/w/cpp/container/vector/vector (перегрузка 8)

...