Problems with c++ templates
Hi all,
I'm currently studying templates in C++ and i'm really puzzled by why
the compiler doesn't like my code!!! I think I understand the concept.
I have created a Stack class which has a pointer to a Node class. The
Node class stores a value and a pointer to the previously added node.
My code is below:
//------------------------------------------------------------------------------
template <typename T>
class Node
{
friend class MyStack;
private:
Node *PreviousNode;
T NodeVal;
public:
Node(T InitVal);
T GetVal() { return NodeVal; }
};
//------------------------------------------------------------------------------
template <typename T>
Node<T>::Node(T InitVal)
{
NodeVal = InitVal;
PreviousNode=NULL;
}
//------------------------------------------------------------------------------
template <typename DT>
class MyStack
{
private:
Node<DT> *TopNode;
int MaximumNodes;
int NumNodes;
public:
MyStack(int Size);
~MyStack();
void Push(DT Val);
DT Pop();
};
//------------------------------------------------------------------------------
MyStack::MyStack(int Size)
{
MaximumNodes = Size;
NumNodes=0;
TopNode = NULL;
}
//------------------------------------------------------------------------------
MyStack::~MyStack()
{
while(NumNodes > 0)
{
Pop();
}
}
//------------------------------------------------------------------------------
template <typename DT>
void MyStack<DT>::Push(DT Val)
{
Node *NewNode;
if (NumNodes < MaximumNodes)
{
NewNode = new Node(Val);
NewNode->PreviousNode = TopNode;
TopNode = NewNode;
NumNodes++;
}
else { throw "Stack Overflow error"; }
}
//------------------------------------------------------------------------------
template <typename DT>
DT MyStack<DT>::Pop()
{
Node *Popped;
DT PopVal;
if(NumNodes >= 1)
{
Popped = TopNode;
TopNode = TopNode->PreviousNode;
PopVal=Popped->GetVal();
delete Popped;
NumNodes--;
return PopVal;
}
else { throw "Stack Underflow error"; }
}
//------------------------------------------------------------------------------
void main()
{
try
{
MyStack <int>*NewStack = new MyStack<int>(5);
NewStack->Push(6);
NewStack->Push(30);
NewStack->Push(2);
NewStack->Push(4);
NewStack->Push(7);
cout << NewStack->Pop() << "\n";
cout << NewStack->Pop() << "\n";
cout << NewStack->Pop() << "\n";
cout << NewStack->Pop() << "\n";
cout << NewStack->Pop() << "\n";
}
catch (char *Str)
{
puts(Str);
}
delete NewStack;
getchar();
}
Amongst errors I get a 'Type mismatch in redeclaration of 'MyStack''
Could somebody please tell me where i'm going wrong!!
Thanks
Daniel
--
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]