BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #35332同步于 2010/1/20
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

模板类的包含编译模型错误

leelgl
2010/1/20镜像同步11 回复
//test.h template<class T> class A { public: void fun() ; }; #include "test.cpp" //test.cpp template<class T> void A<T>::fun() { printf("hello") ; } 按照c++ primer上的说法是可以的,不过有编译错误 test.cpp(3) : error C2143: 语法错误 : 缺少“;”(在“<”的前面) 这是为什么呢?还有什么办法可以将模板类的声明和实现分开呢?
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
Vampire机器人#1 · 2010/1/20
template<class T> void A<T>::fun() //漏了作用域操作符 { printf("hello") ; } 【 在 leelgl 的大作中提到: 】 : //test.h : template<class T> : class A : ...................
leelgl机器人#2 · 2010/1/21
笔误了 不过问题不在这儿 【 在 Vampire 的大作中提到: 】 : template<class T> : void A<T>::fun() //漏了作用域操作符 : { : ...................
shunshine机器人#3 · 2010/1/21
同想知道,顶~
Vampire机器人#4 · 2010/1/21
这样写不就已经是头文件和实现文件的分离了么? 你可以单独写一个源文件 #include "test.h" int main() { A<int> a; a.fun(); return 0; } 然后编译运行这个就可以使用模板了 那个test.cpp只需要被包含在头文件里面,当编译器 看到你代码中使用模板的时候能够找到模板的定义,从而 进行实例化 【 在 leelgl 的大作中提到: 】 : 笔误了 : 不过问题不在这儿
leelgl机器人#5 · 2010/1/21
问题就是这样分离了编译出错,环境vs2005 合在一起肯定没问题 【 在 Vampire 的大作中提到: 】 : 这样写不就已经是头文件和实现文件的分离了么? : 你可以单独写一个源文件 : #include "test.h" : ...................
Vampire机器人#6 · 2010/1/21
三个文件: //test.h template<class T> class A { public: void fun() ; }; #include "test.cpp" //test.cpp #include <cstdio> template<class T> void A<T>::fun() { printf("hello") ; } //foo.cpp #include "test.h" int main() { A<int> a; a.fun(); return 0; } 只编译foo.cpp 【 在 leelgl 的大作中提到: 】 : 问题就是这样分离了编译出错,环境vs2005 : 合在一起肯定没问题
ttplayer机器人#7 · 2010/1/21
【 在 leelgl 的大作中提到: 】 : 问题就是这样分离了编译出错,环境vs2005 : 合在一起肯定没问题 你既然知道Primer那就先看16.8.2章。 然后看这篇文章:为什么C++编译器不能支持对模板的分离式编译 总的来说就是标准支持,编译器实现困难。
leelgl机器人#8 · 2010/1/21
你那是第几版的呢?第四版似乎没有16.8。。。 在16.3讲了可以使用包含编译将声明和实现分离,VC也支持 我试了下,模板函数这样可以,但是模板类不行 【 在 ttplayer 的大作中提到: 】 : 你既然知道Primer那就先看16.8.2章。 : 然后看这篇文章:为什么C++编译器不能支持对模板的分离式编译 : 总的来说就是标准支持,编译器实现困难。
shunshine机器人#9 · 2010/1/22
是啊,遇到同样的问题了,还没搞清楚什么原因