VC6不支持模板函数在cpp文件中的实现
2004-09-30 20:42
369 查看
例如:
//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;
}
//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文件中的实现
- JSF实现在动态表格中下载文件(支持中文文件名)
- asp.net下实现支持文件分块多点异步上传的 Web Services
- extern C配合__cplusplus实现CPP文件和C文件的函数互相调用
- 【SFTP】使用Jsch实现Sftp文件下载-支持断点续传和进程监控
- 【内存管理】单文件CPP清晰模拟实现4种内存管理
- 使文件下载的自定义连接支持 FlashGet 的断点续传多线程链接下载! JSP/Servlet 实现!
- JAVA+FTP实现跨服务器获取文件,支持局域网和外网
- 阿里云客户端的实现(支持文件分块,断点续传,进度,速度,倒计时显示)
- cpp头文件和实现文件里面写什么
- 在VC6中实现多语言支持
- java解压缩文件的实现示例,支持rar和zip格式 ____http://my.oschina.net/manville/blog/280420
- 让nginx支持.htaccess文件实现伪静态的方法!
- cocos2dx jni Android.mk配置,实现自动搜索.cpp文件打包
- 为何不利用博客站的文件空间实现对ClickOnce的支持?
- taskBarTryDlg.cpp : 实现文件
- 在.h文件中写声明,在.cpp文件中写变量和函数,以及实现类的函数
- VC6不支持typedef中递归。终于找到了Tuple的实现方案。
- 文件上传的实现 (马马 2001年09月28日 17:14) PHP同样支持上传文件的功能,但并不是所有支持PHP的网站都支持此功能,特别是免费的网站。 实现上传,首先要在HTML上加入上传文件的“<FORM>”表格。 <form me
- 使文件下载的自定义连接支持 FlashGet 的断点续传多线程链接下载! C#/ASP.Net 实现!