提问者:小点点

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


我试图创建一个类BigInt,它包含一个带有D元素的std::vector。

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

“%d”不是类型,但出现错误


共1个答案

匿名用户

问题是缺省成员初始值设定项(因为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) {}
};

BTW:std::vector(D,0)具有与std::vector(D)相同的效果; 为了方便起见,您可以使用后者。