CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
花落谁家,你作主! 盛大widget设计大赛英雄榜
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  工具平台和程序库

关于模板类的编译连接问题

楼主kenryHuang(冷的时候我想死)2003-09-04 19:42:04 在 C/C++ / 工具平台和程序库 提问

当将模板类的申明和实现分别写在   相应的.h和.cpp中的时候  
  调用模板类的成员函数会发生连接错误,报告找不到这个成员函数  
  例:  
  //   File   :   template.h  
  template   <class   T>  
  class   Test  
  {  
  public:  
          void   func(T&   t);  
  };  
   
   
  //   File   :   template.cpp  
  template   <class   T>  
  void   Test<T>::func(T&   t)  
  {  
          cout   <<   "Test::func\n";  
  }  
   
   
   
  //   File   :   main.cpp  
  int   main(int   argc,   char   *argv[])  
  {  
          Test   t;  
          t.func();  
   
  }  
   
   
  编译环境:  
  OS   :   linux2.4  
  Compiler   :   gcc  
   
  编译过程:  
  gcc   -c   -o   template.o   template.cpp  
  gcc   -c   -o   main.o   main.cpp  
  gcc   -lstdc++   -o   template   template.o   main.o  
   
  结果出现  
  link   error  
  undefined   Test<T>::func()  
   
   
  请问各位在用到template时出现过这种情况吗  
   
   
  发言者有分。  
   
   
   
   
  问题点数:100、回复次数:7Top

1 楼kenryHuang(冷的时候我想死)回复于 2003-09-04 19:42:48 得分 0

另外,如果将template.cpp中的函数func定义放在template.h中,则没有任何问题。Top

2 楼kenryHuang(冷的时候我想死)回复于 2003-09-04 19:49:00 得分 0

文件template.cpp   和main.cpp   都有  
  #include   "template.h"    
  main.cpp中还有#include   <iostream>  
  语法上是没有任何问题的,编译也通过了,请不要在这个上面找原因Top

3 楼aflyinghorse()回复于 2003-09-04 20:03:31 得分 40

将template.cpp中的函数func定义放在template.h  
  这是模板的包含编译模式,对现在的编译器来说需要这样做  
   
  因为大多现在的C++编译器不支持关键字export,所以也就不能把  
  模板的声明和定义分开,而应该把他们放在头文件里。Top

4 楼sevecol(sevecol.blogone.net)回复于 2003-09-04 20:04:56 得分 60

现在的大部分编译器都需要将定义和实现放在一起.除非编译器支持exportTop

5 楼sevecol(sevecol.blogone.net)回复于 2003-09-04 20:05:38 得分 0

现在的大部分编译器都需要将定义和实现放在一起.除非编译器支持exportTop

6 楼kenryHuang(冷的时候我想死)回复于 2003-09-04 20:07:07 得分 0

如果支持export应该怎么做,以前C++   primer中好像提到过,不过我忘了Top

7 楼sevecol(sevecol.blogone.net)回复于 2003-09-04 20:14:58 得分 0

.h  
  template<typename   T>  
  T   play();  
   
  .cpp  
  export   template<typename   T>  
  T   play()  
  {  
        return   T();  
  };Top

8 楼kenryHuang(冷的时候我想死)回复于 2003-09-04 20:43:04 得分 0

gcc   好像不支持,惨。。。Top

相关问题

  • 模板类编译出错
  • 模板类声明为友元类时编译错误
  • 编译嵌套模板类的问题(Digital Mars中)
  • 模板编译问题
  • 请教:在VC中使用类模板,需要如何设置编译器才能编译通过?
  • 请问,下面是关于类模板的code,为何不能编译?
  • [提问C++ Primer - Chapter 2] Unresolved external ? 使用类模板时的编译错误
  • 高分求教,一个类模板的问题,为何通不过编译....
  • 为什么在CList<CMyClass,CMyClass&>模板类中,Find函数编译不过
  • 为什么我用模板类时,总是编译可以通过,但是build就出问题了!

关键词

  • c++
  • 编译器
  • 模板
  • 函数
  • template
  • cpp
  • 定义
  • 类
  • 放在
  • func

得分解答快速导航

  • 帖主:kenryHuang
  • aflyinghorse
  • sevecol

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo