我有一个简单的类,其中一个成员是向量。我想初始化该向量以在类中具有特定大小,但出现错误。这是我的代码:
class MyClass
{
private:
std::vector<int> m_ray_fbos(5);
}
Run Code Online (Sandbox Code Playgroud)
这给了我警告(在 Visual Studio 2017 中)expected a typed identifier
我也尝试过std::vector<int> m_ray_fbos(5, 0);
我唯一可以开始工作的想法是,std::vector<int> m_ray_fbos = { 0, 0, 0, 0, 0 };但显然这对于长向量来说并不理想。
难道我做错了什么?
有没有办法在类定义中指定向量的大小?
()类定义中的成员语法不允许使用括号样式的初始化程序。(我不太确定为什么。)类定义中成员的初始化程序的唯一有效形式是{}大括号初始化程序列表或以 开头的初始化程序=。
这会妨碍你,因为:
std::vector<int> m_ray_fbos{5};
Run Code Online (Sandbox Code Playgroud)
或者
std::vector<int> m_ray_fbos = {5};
Run Code Online (Sandbox Code Playgroud)
调用错误的vector构造函数并且不会给出您想要的结果。和
std::vector<int> m_ray_fbos = 5;
Run Code Online (Sandbox Code Playgroud)
不起作用,因为您需要的构造函数是explicit,并且=该符号进行复制初始化,因此explicit不考虑构造函数。
最简单的答案可能是
std::vector<int> m_ray_fbos = std::vector<int>(5);
Run Code Online (Sandbox Code Playgroud)
你也许也可以做类似的事情
std::vector<int> m_ray_fbos = vec_of_size(5);
Run Code Online (Sandbox Code Playgroud)
如果您有足够的其他原因来编写或使用vec_of_size类函数或自由函数。