免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2794 | 回复: 7
打印 上一主题 下一主题

[C++] C++小白问题,各位指导下。谢了。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-08-10 11:35 |只看该作者 |倒序浏览
一直用C。好多年。
现在转C++,遇到个小白问题,大虾帮解答下。

声明了一个类模板,假设如下
文件:test.h

  1. namespace Test {
  2. template<typename T>
  3. class TestClass {
  4. public:
  5.     TestClass();
  6.     ~TestClass();
  7. }; /** class TestClass */

  8. } /** namespace Test */
复制代码

实现部分放在另一个文件,如test.cpp

  1. #include "test.h"

  2. template<T>
  3. Test::TestClass<T>::TestClass()
  4. {
  5. }

  6. template<T>
  7. Test::TestClass<T>::~TestClass()
  8. {
  9. }
复制代码


假设我的入口文件是main.cpp。

编译时 g++ -I. main.cpp test.cpp -o test

报错说,找不到Test::TestClass<T>::TestClass()的实现?

是不是不能这样隐藏实现?类模板必须把成员函数的实现也放在.h文件?
leojay 该用户已被删除
2 [报告]
发表于 2007-08-10 11:59 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
3 [报告]
发表于 2007-08-10 12:00 |只看该作者
类模板一般来说是不可编译的(可能存在编译器可以先把模板编译成一个不好破解的格式吧,我不知道),你觉得应该放哪里呢?
leojay 该用户已被删除
4 [报告]
发表于 2007-08-10 12:01 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
5 [报告]
发表于 2007-08-10 12:36 |只看该作者
原帖由 leojay 于 2007-8-10 12:01 发表
不过,也不尽然。
如果你的main.cpp中,在#include "test.h"下面再加一行#include "test.cpp"
就不用把代码放在.h文件里了。咔咔咔咔。。。


如果编译器支持export,则可以放到外面不用include
leojay 该用户已被删除
6 [报告]
发表于 2007-08-10 12:50 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
7 [报告]
发表于 2007-08-10 14:01 |只看该作者
原帖由 emuen_1982 于 2007-8-10 13:31 发表


编译template的时候编译器需要知道两个东西:
1. 模板的实现;
2. 模板实参。

如果模板的实现放在cpp文件中,而模板实参是在main中指定的话,实际上就是把这两个方面的信息放在不同的文件中,编译器就找 ...



了解,这个问题主要是由跨平台问题引起的,写了个共享内存的类模板,由于WIN32和UNIX下的实现方式不一样,为了管理方便放到不同的地方了。

现在考虑目前这个问题,采用了一个很土的方式,模仿java的native实现,对成员函数进行了“native”包装。

说白了就是,搞了个类的静态函数,在静态函数里调用外部实现。方法是挺土。不过看上去还行。

不知道大家是咋处理这玩意的。

论坛徽章:
0
8 [报告]
发表于 2007-08-10 22:19 |只看该作者
我看到过有书这样实现...
先在 a.h 文件中 模版声明....
然后创建对应的 a.hpp文件....
在对应的 a.h文件中  模版声明 后面
#include "a.hpp"

使用模版时..直接 #include "a.h"
就可以.....
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP