一个模板类的链接问题(相信学习模板编程的人都应该遇到过),请高手相助!!!

cloudwindbase 2003-06-04 01:36:24
定义了一个模板类:
template<class T>
class CMessage
{
public:
T m_stMsg;

public:
CMessage();
CMessage(const CMessage& msg);
~CMessage();

public:
int Initialize(void);
void Cleanup(void);

...
}

在另一个类中作如下调用:
CMessage<stMsg1> m_Message;
m_Message.Initialize();

stMsg1为一结构体类型.
编译通过,但在链接时出现下列错误:
Undefined first referenced
symbol in file
CMessage<stMsg1>::~CMessage(void) ctest.o
CMessage<stMsg1>::CMessage(void) ctest.o
CMessage<stMsg1>::Initialize(void) ctest.o
ld: fatal: Symbol referencing errors. No output written to test
.

软件环境: redhat 7.1 ,g++

请各位高手相助!!!
...全文
69 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
cloudwindbase 2003-06-05
  • 打赏
  • 举报
回复
问题已解决.
谢谢各位.
georgepcb 2003-06-04
  • 打赏
  • 举报
回复
template的定义和声明必须放在同一头文件中,我以前也问过同样的问题。这和编译过程有关。
i_jianyong 2003-06-04
  • 打赏
  • 举报
回复
目前只能把类模板的定义和实现统统放在头文件中(SGI的STL库就是这样)。
类模板的实例化在编译时进行,这时模板参数被绑定到程序指定的实际类型上。但并不是所有的成员函数都要实例化,只有程序中用到的那些才自动地随类模板地实例化而实例化。
cloudwindbase 2003-06-04
  • 打赏
  • 举报
回复
那除了将定义也放到头文件外,还有别的办法吗?
类模板的实例化是怎么实现的呢?
北极猩猩 2003-06-04
  • 打赏
  • 举报
回复
将函数的定义写在.h文件中,除非你的编译器支持export否则只能这样做。
不过据我所知还没有哪个编译器能支持export关键字呢。:(
cloudwindbase 2003-06-04
  • 打赏
  • 举报
回复
是不是声明和定义要放在同一头文件内?
cloudwindbase 2003-06-04
  • 打赏
  • 举报
回复
这个函数定义了.
template<class T>
int CMessage<T>::Initialize()
{
...
}
wangbing_eternal 2003-06-04
  • 打赏
  • 举报
回复
Initialize(void)函数有定义吗?

24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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