Если (как представляется, основываясь на вашем комментарии) вы хотите, чтобы они были бесплатными функциями, вы не сможете.Вам также придется изменить параметр Stack
, что-то вроде этого:
template <typename T>
void Push(T Value, Stack<T>* &Top)
{
Stack * Cell = new Stack();
Cell->Value = Value;
Cell->next = Top;
Top = Cell;
};
В его нынешнем виде я не слишком рад вашему дизайну.Вы пытаетесь использовать тип Stack
в качестве фактического стека, и в качестве одного узла (ячейки) в стека.В лучшем случае это излишне сбивает с толку.
Редактировать: Что касается стека и узла, я говорю о том (как в приведенном выше коде): Stack *Cell = new Stack();
- вы выделяетеодна ячейка, которая помещается в стеке, но тип, который вы используете для нее , равен Stack
.
Вместо этого я бы сделал что-то подобное:1020 *
template <class T>
struct Stack {
struct node {
T data;
node *next;
};
node *head;
};
template <class T>
void push(T item, Stack<T> *&s) {
Stack<T>::node *n = new Stack<T>:node();
n->data = item;
n->next = s->head;
s->head = n;
}
Не имеет большого значения, что вы действительно делаете, но когда вы кладете что-то в стек, выделение Stack<T>::node
кажется (по крайней мере мне)гораздо больше смысла, чем выделение Stack<T>
.Стек, содержащий несколько узлов, имеет смысл - стек, содержащий несколько стеков, на самом деле этого не делает.