ошибка: неверное использование имени шаблона «ExTree» без списка аргументов || Как сделать, если это исправить? (Начинающий) [закрыто]

-1
задан Clebo Sevic 16 January 2019 в 16:37
поделиться

1 ответ

Правильный синтаксис:

template <typename T>
ExTree<T>* newExTree(T tensor){
    ExTree<T> *e = new ExTree<T>();
    e->left = e->right = nullptr;
    e->tensor = tensor;
    return e;
}

Как говорит вам компилятор, ExTree - это шаблон, а не тип. Если вы пишете шаблон, это не какой-то «супер-тип» для всех типов, которые вы создаете из него. В основном это просто блок кода, который (ре) создается для каждого типа (или комбинации типов), с которым он создается; это не какая-то объединяющая концепция. Шаблон - это , а не тип, и возвращаемые типы и типы переменных , ну, в общем, типы, поэтому вы должны указать, с какими типами создавать экземпляр шаблона, чтобы получить конкретный тип для использования (игнорирование определенных правил C ++ 14, которые делают вещи более грязными).

Кроме того, вам не следует повторять аргумент шаблона после имени функции, как вы это делали. Это делается в специализации шаблонов, но не в их первоначальном объявлении. Например, если вы хотите специализировать newExTree для T = int, вы должны написать

template<> ExTree<int>* newExTree<int>(int x) {
    // ...
}
0
ответ дан Max Langhof 16 January 2019 в 16:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: