Применение шаблонных типов в связных списках
Проблема с шаблонами. Не понимаю в чем проблема, вроде пол-года назад писал тоже самое и все работало, а сейчас компилятор жалуется (на template... перед class Node...) Visual S вообще не запускает, а online компилятор указывает на эту строку, а именно :
declaration of template parameter ‘T’ shadows template parameter
Не понимаю, что не так, объясните.
template<typename T>
class List {
public:
List();
void push_back(T data);
private:
template<typename T>
class Node {
private:
T data;
Node* pNext;
public:
Node(T data = T(), Node* pNext = nullptr) {
this->pNext = pNext;
this->data = data;
}
};
Node<T>* head;
int Size = 0;
};
template<typename T>
List<T>::List() {
head = nullptr;
Size = 0;
}
template<typename T>
void List<T>::push_back(T data) {
if (head == nullptr) {
head = new Node<T>(T data);
}
else {
Node* current = this->head;
while (current->pNext != nullptr) {
current = current->pNext;
}
current->pNext = new Node<T>(data);
}
Size++;
}
int main()
{
List<int> Data;
}
Ответы (2 шт):
Автор решения: olkhovich
→ Ссылка
Можно сделать так:
template <class T> class List {
public:
List();
void push_back(T data);
private:
struct Node {
T data;
Node* next;
};
Node* head = nullptr;
Зачем вам template<typename T> перед вашим классом Node?
И когда вы создаете головной элемент head, он должен быть типа Узла, то есть просто Node* head;
Автор решения: Qwertiy
→ Ссылка
declaration of template parameter ‘T’ shadows template parameter
Ну понятно же написано...
template<typename T>
class List {
template<typename T>
class Node {
Имена T одинаковые.