Chinaunix

标题: C++中模板是不是不能把实现和声明放在两个不同的文件下? [打印本页]

作者: openq    时间: 2007-04-14 01:20
标题: C++中模板是不是不能把实现和声明放在两个不同的文件下?
今天写了个C++模板程序,开始把声明和实现放在不同的文件下,单独编译模块能通过,与main函数一起编译就出错了,而把实现部分放在声明文件中有编译有可以通过了。
请高手赐教!!
谢谢!!
作者: lifanxi    时间: 2007-04-14 01:28
目前大部分的C++编译器要求把模版的定义和实现都放在头文件中,而不能支持分开编译的方式。
C++标准中有一个export关键来解决这个问题,但现在大部份的编译器并不能支持它。
作者: openq    时间: 2007-04-14 13:01
谢谢!!
作者: zwylinux    时间: 2007-04-14 21:14
原帖由 openq 于 2007-4-14 01:20 发表
今天写了个C++模板程序,开始把声明和实现放在不同的文件下,单独编译模块能通过,与main函数一起编译就出错了,而把实现部分放在声明文件中有编译有可以通过了。
请高手赐教!!
谢谢!!



如果模块声明和定义放在不同的文件中而又不支持export关键字,是不能单独编译的,你怎么会行了呢?
作者: openq    时间: 2007-04-15 23:07
原帖由 zwylinux 于 2007-4-14 21:14 发表
如果模块声明和定义放在不同的文件中而又不支持export关键字,是不能单独编译的,你怎么会行了呢?

把模板的声明和实现方在同一个头文件中,在包含main函数的文件中包含这个模板的头文件。
作者: yuyongyu    时间: 2008-01-17 14:16
哪个高手能解释下原因
作者: cofish    时间: 2008-01-18 08:52
最近也在写template, 需要导出成so/dll
目前测试结果是: 如果模板类之间没有调用关系,是可以放在2个文件中的
如果有调用关系, 就基本不能了
即: 能生成so/dll文件,但在ld时会有错.




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2