定义了一个简单的模板,为什么会连接出错呢?

mee123456 2006-08-24 10:06:58
//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
...全文
156 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
mee123456 2006-08-24
  • 打赏
  • 举报
回复
可以这样在形式上将声明和实现分开:

//Stack.h
#ifndef StackH
#define StackH
...
#include "Stack.cpp"

#endif

//Stack.cpp
#ifndef StackCPP
#define StackCPP

#include "Stack.h"
...

#endif

//main.cpp

#include "Stack.h"
int main()
{
...
}

这样在形式上在使用时只需包含Stack.h就可以了,实际上相当于:
#include "Stack.h"
#include "Stack.cpp"

也可以另将这两句放在一个新的头文件里,BCB的STL好像就是这样做的.
mee123456 2006-08-24
  • 打赏
  • 举报
回复
明白了,谢谢
CACACACACA 2006-08-24
  • 打赏
  • 举报
回复
csd08(jone) 的回复是问题的正解.
CACACACACA 2006-08-24
  • 打赏
  • 举报
回复
方法二:
把//stack.cpp中的代码放在//main.cpp中就行了.
csd08 2006-08-24
  • 打赏
  • 举报
回复
包含头文件stack.cpp即可,不是statck.h
#include "stack.cpp"

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧