I'm having problem making this linked stack working. The compiler is giving me errors and I've been checking for half an hour and still could not figure out what is wrong with my code. Would anyone take a look at and tell me what's wrong with it ?
LinkedNode.h
#include<memory>
template<class T>
class LinkedNode
{
friend class LinkedStack<T>;
public:
LinkedNode(T newElement);
T GetElement() const {return element;}
void SetElement(T val) {element = val;}
LinkedNode<T>* GetNext() const {return next;}
void SetNext(LinkedNode<T>* val) {next = val;}
private:
T element;
LinkedNode<T>* next;
};
template<class T>
LinkedNode<T>::LinkedNode(T newElement)
{
element = newElement;
}
LinkedStack.h
#pragma once
#include"LinkedNode.h"
#include<cassert>
template<class T>
class LinkedStack
{
public:
LinkedStack();
int GetSize() const {return size;}
bool IsEmpty() const {return size == 0;}
void Push(T val);
void Pop();
T Peek();
void Clear();
private:
LinkedNode<T>* head;
int size;
};
template<class T>
LinkedStack<T>::LinkedStack():size(0) {}
template<class T>
void LinkedStack<T>::Push(T val)
{
LinkedNode<T>* newOne = new LinkedNode<T>(T val);
if(head == 0)
head = newOne;
else
{
newOne->next = head;
head = newOne;
}
size++;
}
template<class T>
void LinkedStack<T>::Pop()
{
assert(!IsEmpty());
LinkedNode<T>* tpHead = head;
head = head->next;
delete tpHead;
size--;
}
template<class T>
T LinkedStack<T>::Peek()
{
assert(!IsEmpty());
return head->element;
}
template<class T>
void LinkedStack<T>::Clear()
{
while(!IsEmpty())
Pop();
}
Source.cpp
#include"LinkedStack.h"
#include<iostream>
#include<string>
#include<memory>
int main()
{
LinkedStack<int> stack;
std::cout << "Add" << std::endl;
stack.Push(1);
stack.Push(2);
stack.Push(3);
stack.Push(4);
stack.Push(5);
std::cout << "Top element is: " << stack.Peek();
stack.Pop();
std::cout << "After pop one out, its top element is: " << stack.Peek() << std::endl;
return 0;
}