各位都是高手了,问一个基础问题:
我写了如下代码,想利用类模板的缺省实参,但是发现当我设定的实参大小和缺省值不一样的时候,编译会出错。请指教。
#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;
}
我写了如下代码,想利用类模板的缺省实参,但是发现当我设定的实参大小和缺省值不一样的时候,编译会出错。请指教。
#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;
}
解决方案 »
- 这个是怎么读出来的。。
- 各位大哥,MFC中如何让picture控件上的坐标原点在控件矩形框的左下角,x轴方向向右,y轴方向向上???急求
- 辞职了,又开始找工作
- CTreeView显示系统图标的问题
- 是否可以自定接口使用的参数类型??急
- 有关SQL SEVER 2000扩展存储过程的问题~
- 请教这个类定义是什么意思? class oDynamic_OclKernel oRoot {}
- 为什么非模式对话框显示的是空白?
- 求在VC中将十进制数转换为十六进制数的函数!(送高分)急!!!
- 如何提高程序的优先级,禁止别的进程关闭自己?
- 跪求解决方法:http://域名/insert.php/+数据格式 用vc实现这种格式的数据发送
- 【招聘】C++/VC兼职
class CStack{
...
}就可以了.
CStack<T,nSize >::CStack()参数少了一个
{
m_sPos = 0;
}