首页 > 解决方案 > 为什么初始化 std::vector 时不能使用模板整数?

问题描述

我正在尝试创建一个包含带有 D 元素的 std::vector 的类 BigInt。

template<int D>
class BigInt
{
    public:
        std::vector<short> digit(D, 0);
};

我收到一条错误消息,指出“D”不是一种类型

标签: c++classtemplatesvectorinitialization

解决方案


问题是默认成员初始化器(自 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)为方便起见,您可以使用后者。


推荐阅读