首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

VC6不支持模板函数在cpp资料中的实现

2012-09-27 
VC6不支持模板函数在cpp文件中的实现例如://myHeader.h?#include iostream.htemplate class Tclass A{

VC6不支持模板函数在cpp文件中的实现

例如:
//myHeader.h

?

#include <iostream.h>template <class T>class A{      public:      A();      T &max(const T &,const T &) const;};template <class T> T &A<T>::max(const T &a,const T &b){    return a<b?b:a;}

?//main.cpp

#include <iostream.h>#include “myHeader.h“main(){    A<int>  *cls=new A<int>();     int  a=100;     int  b=200;     cout<<cls->max(a,b)<<endl;     return 0;}
?按照上面的格式就可以执行。如果把class A的函数max的实现从头文件中拿出来放在一个cpp文件中

,则会产生错误,代码如下:
//myHeader.h

#include <iostream.h>template <class T>class A{      public:      A();      T &max(const T &,const T &) const;};//classA.cpp#include “myHeader.h“template <class T> T &A<T>::max(const T &a,const T &b){    return a<b?b:a;}

?//main.cpp

#include <iostream.h>#include “myHeader.h“main(){    A<int>  *cls=new A<int>();     int  a=100;     int  b=200;     cout<<cls->max(a,b)<<endl;     return 0;}
?这时候就会出错,原因就是VC6不支持模板函数在cpp文件中的实现。解决的办法是把其实现放在头文件中,

不一定放在定义类的头文件中,可以放在独立的头文件中。
注意:其实根据实质,也可以把模板函数的实现放在cpp文件中,但是要把cpp文件包含在调用该模板函数的
文件中。
代码如下:
//myHeader.h

#include <iostream.h>template <class T>class A{public: A(); const T& max(const T&,const T&); };//classA.cpp#include <iostream.h>#include "myHeader.h"template <class T>const T &A<T>::max(const T &a,const T &b){ return a<b?b:a;}template <class T>A<T>::A(){ cout<<"constructor!"<<sizeof(T)<<endl;}

?//main.cpp

#include "myHeader.h"#include "classA.cpp"#include <iostream.h>main(){ A<int> *cls=new A<int>(); int a=100; int b=100; A<double> *d=new A<double>(); double d1=100.2; double d2=200.2; cout<<cls->max(a,b)<<endl; cout<<d->max(d1,d2)<<endl; return 0;}
?

热点排行