例如:
//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,VC2005的MFC文件复制模板”指的是使用Microsoft Visual C++ 6.0(简称VC6)和Visual Studio 2005开发环境中的MFC(Microsoft Foundation Classes)框架创建的一个文件复制功能的模板项目。MFC是微软...
- 在VC2003中,状态栏通常是通过对话框资源编辑器添加到对话框模板的,通过IDC静态控件的类名设置为`WC_STATUSBAR`。 - 而这个自定义的状态栏控件则需要在代码中进行更复杂的初始化,包括创建进度条子窗口并将其...
在VC6环境下,CStdioFile是MFC(Microsoft Foundation Classes)库中提供的一种用于文本文件操作的类,它基于标准C语言的stdio.h库,提供了简单易用的接口进行文件的读写操作。本教程将详细介绍如何使用CStdioFile...
在本篇中,我们将详细介绍如何在Visual C++(VC)环境下创建一个MEX函数,供MATLAB调用。 **一、环境准备** 首先,确保你已经安装了MATLAB和Visual Studio。MATLAB需要版本较高,支持MEX功能,而Visual Studio则...
通过以上步骤,你可以在VC6和MFC环境下,利用CSocket实现CS模式的文件传输。不过,实际开发中,可能还需要考虑网络状况、并发连接处理、文件大小限制以及安全性等问题。对于初学者来说,理解并实践这些步骤是提高...
然而,在大型项目中,当头文件数量众多时,手动在CPP文件中添加对应的实现框架会变得非常繁琐且易出错。为了解决这个问题,开发者们创造了一种名为h2cpp的工具,它能够根据头文件自动生成相应的CPP文件,显著提高...
在给定的"VC 进制转换 cpp和h文件"中,包含的ConvNums.h和ConvNums.cpp文件提供了用于二进制、八进制、十进制和十六进制之间转换的函数。以下是这些文件可能包含的关键知识点和实现细节: 1. **进制的概念**: - ...
本文将详细探讨如何在VC6中使用`CHtmlView`来实现这一功能。 首先,我们需要创建一个新的MFC应用项目。打开VC6,选择“文件”>“新建”,然后在工程类型中选择“MFC应用程序”。在“应用程序向导”中,选择“基于...
如果分开,需要在实现文件中使用关键字`template`来显式实例化。 2. **实例化**:通过在类名后面跟上尖括号`<类型>`来实例化类模板,如`MyContainer<int>`。实例化可以在声明时、定义时或使用时完成。 3. **模板...
在VC6这个经典的微软开发环境中,为Edit控件添加对keydown事件的支持,是许多程序员在进行Windows应用程序开发时可能遇到的问题。Edit控件是Windows GUI(图形用户界面)中的一个基本元素,通常用于接收用户的文本...
在VC6的C++代码中,这可以通过以下方式实现: ```cpp CoInitialize(NULL); Excel::ApplicationPtr excelApp = NULL; excelApp.CreateInstance(__uuidof(Excel::Application)); excelApp->Visible = true; // 如果...
在VC6中,对话框是由对话框模板资源(.RC文件)定义的,包含了控件的位置、大小和属性。当对话框被显示时,Windows会创建一个对话框窗口,并绘制默认的背景。要改变背景色,我们需要覆盖默认的绘图行为。 以下是...
标题中的“测试 BORLAND C++ 5.5 和 VC6.0 对函数模板的支持程度的 C++”指的是一个编程实验或案例,旨在评估两个不同的编译器——BORLAND C++ 5.5 和 Microsoft Visual C++ 6.0(简称VC6.0)在处理C++函数模板时的...
在文件名称列表中看到的"VC98"可能是指Visual C++ 1998,这是VC6的正式发布年份。这个目录很可能包含了与VC6相关的各种子目录和文件,比如项目文件(.dsp)、源代码文件(.cpp、.h)、资源文件(.rc)和库文件(.lib...
这个名为 "JS_CPP.rar" 的压缩包提供了一个实践案例,展示了如何在 JavaScript 和 VC (Visual C++) 之间实现互操作性。这些交互通常通过特定的接口或库来完成,以确保数据和控制流程能在两种语言之间无缝传递。 1. ...
在`ParallelPort.cpp`这个文件中,很可能包含了具体的并行端口读写操作的实现。 为了使用MFC进行并行端口编程,首先需要创建一个MFC应用程序项目。在Visual Studio中,选择“新建”->“项目”,然后在模板中选择MFC...
这些文件将详细展示如何在VC6.0中实现模板匹配的功能,包括MFC类的定义、事件处理函数以及图像处理算法。 综上所述,"VC操作图像的模板匹配"项目展示了如何在VC6.0环境下,结合MFC库来实现一个图像处理应用,该应用...
本例程将深入探讨如何在Visual C++(VC)环境下开发和使用DLL文件,特别关注在VC6.0下创建的DLL项目,并说明其在VS2005中的兼容性。 首先,创建一个DLL项目是VC开发过程中的关键步骤。在VC6.0中,可以通过选择"文件...
在`Array`模板中,可能有一个或多个纯虚函数,以定义接口但不提供具体实现,如: ```cpp virtual void resize(size_t newSize) = 0; // 重新调整数组大小 virtual void copy(const Array<T>& src) = 0; // 复制另一...
总的来说,“VC释放EXE资源文件”的技术是一种有效的资源管理和分发策略,它可以灵活地将文件嵌入到程序中并在运行时释放,有助于软件的更新、安全性和便携性。在实际开发中,开发者可以根据需要调整和扩展这一方法...