首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

关于类模板的缺省实参有关问题

2012-01-14 
关于类模板的缺省实参问题各位都是高手了,问一个基础问题:我写了如下代码,想利用类模板的缺省实参,但是发

关于类模板的缺省实参问题
各位都是高手了,问一个基础问题:
我写了如下代码,想利用类模板的缺省实参,但是发现当我设定的实参大小和缺省值不一样的时候,编译会出错。请指教。
#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;
}


[解决办法]
将所有模版函数定义放入
class CStack{
...
}

就可以了.
[解决办法]
template <class T, short nSize = 100>
CStack <T,nSize > ::CStack()参数少了一个
{
m_sPos = 0;
}

热点排行