定义了一个简单的模板,为什么会连接出错呢?
//stack.h
template <class T, short sSize=100>
class Stack{
private:
T m_data[ sSize ];
short m_sPos;
public:
Stack()
{
m_sPos = 0;
}
~Stack(){}
void Push( T value );
T Pop();
bool IsEmpty()
{
return( m_sPos == 0 );
}
bool HasElement()
{
return( m_sPos != 0 );
}
bool IsFull()
{
return( m_sPos == sSize );
}
long GetSize()
{
return sSize;
}
};
//stack.cpp
template <class T, short sSize=100>
void Stack<T>::Push( T value )
{
m_data[ m_sPos++] = value;
}
template <class T, short sSize=100 >
T Stack<T>::Pop()
{
return m_data[--m_sPos];
}
//main.cpp
int main(int argc, char* argv[])
{
Stack<double,100> doubleStack;
cout<<"doubleStack size is "<<doubleStack.GetSize()<<endl;
doubleStack.Push( 1.1 );
doubleStack.Push( 2.2 );
doubleStack.Push( 3.3 );
while( doubleStack.HasElement())
{
cout<<doubleStack.Pop()<<endl;
}
Stack<long,10>* plStack = new Stack<long, 10>;
plStack->Push( 1000 );
plStack->Push( 2000 );
delete plStack;
return 0;
}
报错误:
[Linker Error] Unresolved external 'Stack<double, 100>::Push(double)' referenced from E:\EXAMPLE\COM\TEMPLETE\MAIN.OBJ
[Linker Error] Unresolved external 'Stack<double, 100>::Pop()' referenced from E:\EXAMPLE\COM\TEMPLETE\MAIN.OBJ
[Linker Error] Unresolved external 'Stack<long, 10>::Push(long)' referenced from E:\EXAMPLE\COM\TEMPLETE\MAIN.OBJ