C ++ std :: vector,静态初始化

时间:2018-11-13 15:36:52

标签: c++ stdvector

我正在一个项目中,该项目在类定义中包括一个成员变量:

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

这看起来像是无符号16位整数的3维数组。

当前的初始化是通过创建多个UINT16数组,然后使用memcpy将它们转移到m_vector中来完成的。

我正在寻找一种在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我刚刚在开发系统上尝试了相同的逻辑,它正在运行Windows 7 [6.1.7601]和Microsoft Visual Studio [10.0.40219.1 SP1Rel]和Microsoft Visual C ++ 2010 [01018-532-2002181] -70881]

在我的班级标题中,我有:

    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

这种逻辑几乎与运行iOS和Qt 5.11的MacBook Pro上的第一个Edit相同,并且可以编译和运行。

我现在认为这更多是MSVC 2010的问题,而不是语法。

1 个答案:

答案 0 :(得分:4)

当然可以。

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)