c++ - 为什么初始化 std::vector 时不能使用模板整数?
问题描述
我正在尝试创建一个包含带有 D 元素的 std::vector 的类 BigInt。
template<int D>
class BigInt
{
public:
std::vector<short> digit(D, 0);
};
我收到一条错误消息,指出“D”不是一种类型
解决方案
问题是默认成员初始化器(自 C++11 起)仅支持等号(或大括号)初始化器,但不支持括号初始化器。
你可以
template<int D>
class BigInt
{
public:
std::vector<short> digit = std::vector<short>(D, 0);
};
您还可以在构造函数中使用成员初始值设定项列表,而不是默认成员初始值设定项。
template<int D>
class BigInt
{
public:
std::vector<short> digit;
BigInt() : digit(D, 0) {}
};
顺便说一句:与;std::vector<short>(D, 0)
具有相同的效果 std::vector<short>(D)
为方便起见,您可以使用后者。
推荐阅读
- c# - 反序列化对象
- amazon-web-services - 降低 AWS 中的数据传输成本
- php - 使用 Ajax 时如何访问购物车 id 的会话变量?如何设置属性?
- angular - 是否可以在从服务器获取之前过滤 api 数据?
- python-3.x - 如何使用 Matplotlib 更改我的代码以停止 DepreciatonWarning:使用或从“集合”导入 ABC
- lua - 如何修改由 C API 创建的元表?
- amazon-web-services - 禁用 AWS Api Gateway http --> https 307 重定向
- c# - 如何让 c# 从网站获取所有 URL 并将它们放入列表中
- php - 在单个函数中如何在 CodeIgniter 中执行两个重定向方法?
- firebase - 现在将服务器值设置为时间戳