luqingfei@C++

为中华之崛起而崛起!
兼听则明,偏听则暗。

[转] 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;
}

posted on 2009-02-17 12:51 luqingfei 阅读(490) 评论(0)  编辑 收藏 引用 所属分类: C++基础


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


导航

<2009年2月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
1234567

统计

留言簿(6)

随笔分类(109)

随笔档案(105)

Blogers

Game

Life

NodeJs

Python

Useful Webs

大牛

搜索

积分与排名

最新评论

阅读排行榜

评论排行榜