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

[入库:2005年8月19日] [更新:2007年3月24日]

本文简介:选择自 _cpu 的 blog

例如:
//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;
}

本文关键:VC6不支持模板函数在cpp文件中的实现
  相关方案
Google
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top