C++ std::vector, 静态初始化
C++ std::vector, static initialisation
我正在开发一个包含成员变量的项目,在 class 定义中:
static std::vector < std::vector < std::vector < UINT16 > > > m_vectors;
这看起来像一个 3 维无符号 16 位整数数组。
目前对此的初始化是通过创建多个 UINT16 数组然后 t运行 使用 memcpy 将它们转移到 m_vectors 来完成的。
我正在寻找一种在 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]
在我的 class header 我有:
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
与我的 MacBook Pro 运行 iOS 和 Qt 5.11 上的第一个编辑几乎相同的相同逻辑编译和工作。
我现在认为这更多是 MSVC 2010 的问题,而不是语法。
当然,这是可能的。
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)
我正在开发一个包含成员变量的项目,在 class 定义中:
static std::vector < std::vector < std::vector < UINT16 > > > m_vectors;
这看起来像一个 3 维无符号 16 位整数数组。
目前对此的初始化是通过创建多个 UINT16 数组然后 t运行 使用 memcpy 将它们转移到 m_vectors 来完成的。
我正在寻找一种在 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]
在我的 class header 我有:
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
与我的 MacBook Pro 运行 iOS 和 Qt 5.11 上的第一个编辑几乎相同的相同逻辑编译和工作。
我现在认为这更多是 MSVC 2010 的问题,而不是语法。
当然,这是可能的。
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)