我正在一个项目中,该项目在类定义中包括一个成员变量:
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的问题,而不是语法。
答案 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)