`
zha_zi
  • 浏览: 590194 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

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;
}
 
分享到:
评论

相关推荐

    VC6,VC2005的MFC文件复制模板

    标题中的“VC6,VC2005的MFC文件复制模板”指的是使用Microsoft Visual C++ 6.0(简称VC6)和Visual Studio 2005开发环境中的MFC(Microsoft Foundation Classes)框架创建的一个文件复制功能的模板项目。MFC是微软...

    带进度条的VC对话框状态栏控件.h和.cpp文件

    - 在VC2003中,状态栏通常是通过对话框资源编辑器添加到对话框模板的,通过IDC静态控件的类名设置为`WC_STATUSBAR`。 - 而这个自定义的状态栏控件则需要在代码中进行更复杂的初始化,包括创建进度条子窗口并将其...

    CStdioFile读写文件文档 VC6编写

    在VC6环境下,CStdioFile是MFC(Microsoft Foundation Classes)库中提供的一种用于文本文件操作的类,它基于标准C语言的stdio.h库,提供了简单易用的接口进行文件的读写操作。本教程将详细介绍如何使用CStdioFile...

    VC中实现mex函数的详细步骤

    在本篇中,我们将详细介绍如何在Visual C++(VC)环境下创建一个MEX函数,供MATLAB调用。 **一、环境准备** 首先,确保你已经安装了MATLAB和Visual Studio。MATLAB需要版本较高,支持MEX功能,而Visual Studio则...

    CSocket vc6 mfc CS模式 传文件

    通过以上步骤,你可以在VC6和MFC环境下,利用CSocket实现CS模式的文件传输。不过,实际开发中,可能还需要考虑网络状况、并发连接处理、文件大小限制以及安全性等问题。对于初学者来说,理解并实践这些步骤是提高...

    h2cpp根据头文件生成CPP

    然而,在大型项目中,当头文件数量众多时,手动在CPP文件中添加对应的实现框架会变得非常繁琐且易出错。为了解决这个问题,开发者们创造了一种名为h2cpp的工具,它能够根据头文件自动生成相应的CPP文件,显著提高...

    VC 进制转换 cpp和h文件

    在给定的"VC 进制转换 cpp和h文件"中,包含的ConvNums.h和ConvNums.cpp文件提供了用于二进制、八进制、十进制和十六进制之间转换的函数。以下是这些文件可能包含的关键知识点和实现细节: 1. **进制的概念**: - ...

    VC6中使用CHtmlView在对话框控制中显示HTML文件

    本文将详细探讨如何在VC6中使用`CHtmlView`来实现这一功能。 首先,我们需要创建一个新的MFC应用项目。打开VC6,选择“文件”&gt;“新建”,然后在工程类型中选择“MFC应用程序”。在“应用程序向导”中,选择“基于...

    VC中一些通用类的模板

    如果分开,需要在实现文件中使用关键字`template`来显式实例化。 2. **实例化**:通过在类名后面跟上尖括号`&lt;类型&gt;`来实例化类模板,如`MyContainer&lt;int&gt;`。实例化可以在声明时、定义时或使用时完成。 3. **模板...

    VC中调用EXECL模板生成报表

    在VC6的C++代码中,这可以通过以下方式实现: ```cpp CoInitialize(NULL); Excel::ApplicationPtr excelApp = NULL; excelApp.CreateInstance(__uuidof(Excel::Application)); excelApp-&gt;Visible = true; // 如果...

    VC6对话框背景色

    在VC6中,对话框是由对话框模板资源(.RC文件)定义的,包含了控件的位置、大小和属性。当对话框被显示时,Windows会创建一个对话框窗口,并绘制默认的背景。要改变背景色,我们需要覆盖默认的绘图行为。 以下是...

    测试 BORLAND C++ 5.5 和 VC6.0 对函数模板的支持程度的 C+

    标题中的“测试 BORLAND C++ 5.5 和 VC6.0 对函数模板的支持程度的 C++”指的是一个编程实验或案例,旨在评估两个不同的编译器——BORLAND C++ 5.5 和 Microsoft Visual C++ 6.0(简称VC6.0)在处理C++函数模板时的...

    MSDN VC6代码

    在文件名称列表中看到的"VC98"可能是指Visual C++ 1998,这是VC6的正式发布年份。这个目录很可能包含了与VC6相关的各种子目录和文件,比如项目文件(.dsp)、源代码文件(.cpp、.h)、资源文件(.rc)和库文件(.lib...

    JS_CPP.rar_JS调用C++_javascript VC_js调用C++函数_vc javascript_调用JS

    这个名为 "JS_CPP.rar" 的压缩包提供了一个实践案例,展示了如何在 JavaScript 和 VC (Visual C++) 之间实现互操作性。这些交互通常通过特定的接口或库来完成,以确保数据和控制流程能在两种语言之间无缝传递。 1. ...

    VC.rar_MFC_ParallelPort.cpp_VC and MFC_vc mfc

    在`ParallelPort.cpp`这个文件中,很可能包含了具体的并行端口读写操作的实现。 为了使用MFC进行并行端口编程,首先需要创建一个MFC应用程序项目。在Visual Studio中,选择“新建”-&gt;“项目”,然后在模板中选择MFC...

    VC操作图像的模板匹配

    这些文件将详细展示如何在VC6.0中实现模板匹配的功能,包括MFC类的定义、事件处理函数以及图像处理算法。 综上所述,"VC操作图像的模板匹配"项目展示了如何在VC6.0环境下,结合MFC库来实现一个图像处理应用,该应用...

    VC的dll文件开发与使用例程

    本例程将深入探讨如何在Visual C++(VC)环境下开发和使用DLL文件,特别关注在VC6.0下创建的DLL项目,并说明其在VS2005中的兼容性。 首先,创建一个DLL项目是VC开发过程中的关键步骤。在VC6.0中,可以通过选择"文件...

    Array数组模板vc

    在`Array`模板中,可能有一个或多个纯虚函数,以定义接口但不提供具体实现,如: ```cpp virtual void resize(size_t newSize) = 0; // 重新调整数组大小 virtual void copy(const Array&lt;T&gt;& src) = 0; // 复制另一...

    VC6操作ACCESS数据库

    首先,你需要在VC6中创建一个新的MFC(Microsoft Foundation Classes)应用程序,选择“基于对话框”的项目模板,这将为我们提供一个用户界面来与数据库交互。在项目设置中,确保已包含MFC对ODBC(Open Database ...

    vc6中让EDit响应keydown事件

    在VC6这个经典的微软开发环境中,为Edit控件添加对keydown事件的支持,是许多程序员在进行Windows应用程序开发时可能遇到的问题。Edit控件是Windows GUI(图形用户界面)中的一个基本元素,通常用于接收用户的文本...

Global site tag (gtag.js) - Google Analytics