Почему я не могу использовать целое число шаблона при инициализации std :: vector? - PullRequest
2 голосов
/ 20 июня 2020

Я пытаюсь создать класс BigInt, содержащий std :: vector с элементами D.

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

Я получаю сообщение об ошибке, в котором говорится, что 'D' не является типом

1 Ответ

5 голосов
/ 20 июня 2020

Проблема в том, что инициализатор члена по умолчанию (начиная с 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<short>(D, 0) имеет тот же эффект как std::vector<short>(D); вы можете использовать последний для удобства.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...