各位都是高手了,问一个基础问题:
我写了如下代码,想利用类模板的缺省实参,但是发现当我设定的实参大小和缺省值不一样的时候,编译会出错。请指教。
#include <iostream.h>template <class T, short nSize = 100>
class CStack
{
public:
CStack();
~CStack(){}; void Push(T value);
T Pop();
bool IsEmpty();
bool HasElements();
bool IsFull();
long GetSize();private:
T m_data[nSize];
short m_sPos;
};template<class T, short nSize = 100>
CStack<T>::CStack()
{
m_sPos = 0;
}
template<class T, short nSize = 100>
void CStack<T>::Push(T value)
{
m_data[m_sPos++] = value;
}template<class T, short nSize = 100>
T CStack<T>::Pop()
{
return m_data[--m_sPos];
}template<class T, short nSize = 100>
bool CStack<T>::IsEmpty()
{
return (m_sPos == 0);
}template<class T, short nSize = 100>
bool CStack<T>::HasElements()
{
return (m_sPos != 0);
}template<class T, short nSize = 100>
bool CStack<T>::IsFull()
{
return (m_sPos == nSize);
}template<class T, short nSize = 100>
long CStack<T>::GetSize()
{
return nSize;
}int main(int argc, char *argv[])
{
CStack<double> doubleStack;
      //CStack<double, 20> doubleStack; 如此用法,编译出错。
cout<< "doubleStack's size is: " << doubleStack.GetSize() << endl;
doubleStack.Push(1.1);
doubleStack.Push(1.2);
doubleStack.Push(2.4);
while(doubleStack.HasElements())
{
cout << doubleStack.Pop() << endl;
}
CStack<long> *plongStack = new CStack<long,100>;
cout << "plongStack's size is : " << plongStack->GetSize() << endl;
plongStack->Push(30000000);
plongStack->Push(4.223);
while(plongStack->HasElements())
{
cout << plongStack->Pop()<< endl;
}
delete plongStack; return 0;
}