я их вырезал, проблема в том, что нужно создать конструктор для узла списка:
template <typename Type>
class CircularList
{
protected:
template <typename Type>
struct Node
{
Node(Node* next, Type otheritem = Type());
Type item;
Node *next;
};
private:
int count;
Node<Type> *head;
Node<Type> *tail;
public:
CircularList();
~CircularList();
.....
};
Нужно написать такой конструктор, но он жалуется, где ошибка может быть?
template<typename Type>
CircularList<Type>::Node<Type>::Node(CircularList<Type>::Node<Type>* next, Type otheritem)
{
this->item = otheritem;
this->next = next;
}
Всё ещё неправильно :( Оберните код в теги: 3 символа ` до и после кода (в случае одиночной конструкции достаточно 1 ` с обеих сторон). Спасибо!
Сама ошибка где?
Ошибка в том, что интерпретатор вроде как не может определить этот конструктор
Вы своими словами собираетесь пересказать? Или покажете, что компилятор написал?
Так как это шаблоны, компилятор у меня не может распознать нормально ошибку. Вот так выглядит объявление конструктора полное, CircularList<Type>::Node<Type>::Node(CircularList<Type>::Node<Type>* next, Type otheritem) Слово Node прям перед скобками не должно высвечиваться, так как это конструктор, но visual studio его подсвечивает так, как будто это пользовательский тип данных
Все нормально компилятор может "распознать"
https://godbolt.org/z/ax1KesT5K Он вам даже говорит ЧТО сделать нужно, чтобы заработало
Ну он жалуется на template <typename Type> перед определением struct Node, то-есть <typename Type> перед определением лишнее получается?
Оберните код в теги: 3 символа ` до и после кода (в случае одиночной конструкции достаточно 1 ` с обеих сторон). Спасибо!
Смотря что вы сделать хотите. Если Node должен быть параметеризирован другим типом, то не лишнее. Если Type у ноды тот же, что и у списка, то лишнее
Тот же, что и у списка
Тогда нет смысла делать Node тоже шаблонным
Понял, спасибо
Обсуждают сегодня