为什么初始化std :: vector时不能使用模板整数?

时间:2020-06-20 10:44:53

标签: c++ class templates vector initialization

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

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

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

1 个答案:

答案 0 :(得分:5)

问题是default member initializer(因为C ++ 11)仅支持等号(或加括号)的初始化程序,但不支持 括号初始化程序。

您可以

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

您还可以在构造函数中使用member initializer list代替默认成员初始化程序

template<int D>
class BigInt
{
    public:
        std::vector<short> digit;

        BigInt() : digit(D, 0) {}
};

顺便说一句:std::vector<short>(D, 0)std::vector<short>(D)具有相同的作用;您可以方便地使用后者。

相关问题