`
opencrazy
  • 浏览: 29829 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

C++模板类的声明、定义和使用

阅读更多
1. 将C++模板类的声明和定义都放在一个文件,如.h或.cpp文件中
   使用的时候加入#include "模板类文件名.h(或.cpp)“即可。
2. 将C++模板类的声明和定义分别放在.h和.cpp文件中
   且在.cpp文件中包含 #include ".h"
  
   不过在使用时,会因为不同的开发环境而有所不同:
   a. 在集成开发环境code::blocks下
      在调用程序中只加入 #include "模板类.cpp" 可以编译、运行通过
      或者同时加入 #include "模板类.h" 和 "模板类.cpp" 也可以编译、运行通过
      但只加入 #include "模板类.h" 是不能够运行通过,会出现 undefined  reference to 错误
   b. 在linux gcc 环境下:
      在调用程序中只能加入 #include "模板类.cpp" 才能编译、运行通过
      否则 如果同时加入 #include "模板类.h" 和 "模板类.cpp" 则出现 class 重复定义的错误

总结: 为什么需要在调用程序中加入  #include "模板类.cpp" 那是因为只有将模板类.cpp文件同调用程序.cpp文件放在一起编译、运行才能真正确定类的真正类型,才能运行通过,不出现link之类(undefined reference to)的错误
分享到:
评论
3 楼 volkswageos 2010-09-06  
在vc++2008中只可以在调用的文件中引用头文件和定义文件或是只引用定义文件
2 楼 volkswageos 2010-09-06  
在定义头文件中#include "模板类.cpp"  也可以的而且是在vc6.0
1 楼 volkswageos 2010-09-05  
那么在vc++ 2005中又是什么情况呢?

相关推荐

    详解C++ 前置声明

    ,也可以前置声明模板类:template class<typename>Foo;。如果类包含在名字空间中,需在名字空间内做前置声明:namespace tlanyan {class Foo;};,而不能这样:class tlanyan::Foo;。 前置声明作用 根据其用途,前置...

    C++利用链表模板类实现简易队列

    1)模板类的声明和定义不能分开(即不能分别放在.h和.cpp文件里)。 2)声明新节点时,如果声明的节点是辅助操作的,可以不用new关键字,例如在析构函数中,直接用:Node* temp;定义即可。如果声明一个新节点加入...

    C++程序设计代码

    3.(选做)声明一个哺乳动物类Mammal,再由此派生出狗类Dog,定义一个Dog类的对象,观察基类与派生类的构造函数和析构函数的调用顺序。 4.完善实验四第2题的程序,具体要求如下: 任务1:从people(人员)类派生出...

    C++ Primer第四版【中文高清扫描版】.pdf

    12.1.4 类声明与类定义 374 12.1.5 类对象 375 12.2 隐含的this指针 376 12.3 类作用域 380 类作用域中的名字查找 382 12.4 构造函数 385 12.4.1 构造函数初始化式 387 12.4.2 默认实参与构造函数 391 12.4.3 默认...

    C++基于消息队列的多线程实现示例代码

    std::lock_gurad 是 C++11 中定义的模板类。定义如下: template <class> class lock_guard; lock_guard 对象通常用于管理某个锁(Lock)对象,因此与 Mutex RAII 相关,方便线程对互斥量上锁,即在某个 lock_guard...

    一组新的多维数组模板类

    一组新的多维数组模板类 by chen3feng(RoachCock@smth) email: chen3feng@163.com, chen3fengx@163.com, chen3fengx@hotmail.com [引言] 在C/C++开发中,多维数组是一个让很多人感到棘手的问题.原因...

    Visual C++ 2005入门经典.part08.rar (整理并添加所有书签)

    15.2 使用CList模板类 15.2.1 绘制曲线 15.2.2 定义CCurve类 15.2.3 实现CCurve类 15.2.4 练习使用CCurve类 15.3 创建文档 15.4 改进视图 15.4.1 更新多个视图 15.4.2 滚动视图 15.4.3 使用MM_LOENGLISH映射模式 ...

    Visual C++ 2005入门经典.part04.rar (整理并添加所有书签)

    15.2 使用CList模板类 15.2.1 绘制曲线 15.2.2 定义CCurve类 15.2.3 实现CCurve类 15.2.4 练习使用CCurve类 15.3 创建文档 15.4 改进视图 15.4.1 更新多个视图 15.4.2 滚动视图 15.4.3 使用MM_LOENGLISH映射模式 ...

    详解C++编程中类的声明和对象成员的引用

    类是用户自定义的类型,如果程序中要用到类,必须先进行声明,或者使用已存在的类(别人写好的类、标准库中的类等),C++语法本身并不提供现成的类的名称、结构和内容。 一个简单的类的定义: class Student{ //...

    stl标准库的学习

    C++标准模板库其实属于C++标准库的一部分,C++标准模板库主要是定义了标准模板的定义与声明,而这些模板主要都是 类模板,我们可以调用这些模板来定义一个具体的类;与之前的自己手动创建一个函数模版或者是类模板...

    Visual C++ 2005入门经典.part05.rar (整理并添加所有书签)

    15.2 使用CList模板类 15.2.1 绘制曲线 15.2.2 定义CCurve类 15.2.3 实现CCurve类 15.2.4 练习使用CCurve类 15.3 创建文档 15.4 改进视图 15.4.1 更新多个视图 15.4.2 滚动视图 15.4.3 使用MM_LOENGLISH映射模式 ...

    鸡啄米:C++编程入门系列

    鸡啄米:C++编程入门系列之十三(类与对象:类的声明、成员的访问 控制和对象) 鸡啄米:C++编程入门系列之十四(类与对象:构造函数和析构函数) 鸡啄米:C++编程入门系列之十五(类与对象:类的组合) 鸡啄...

    C++标准库stl

    <istream> 为管理输出流缓存区的输入定义模板类 <ostream> 为管理输出流缓存区的输出定义模板类 <sstream> 支持字符串的流输入输出 <fstream> 支持文件的流输入输出 <iosfwd> 为输入输出对象提供向前的声明 ...

    Effective C++ 中文版

    有人说C++程序员可以分成两类,读过Effective C++的和没读过的。世界顶级C++大师Scott Meyers成名之作的第三版的确当得起这样的评价。当您读过《Effective C++中文版(第3版改善程序与设计的55个具体做法)》后,就...

    C和C++头文件对比一览

    #include <utility> //STL 通用模板类 #include <vector> //STL 动态数组容器 #include #include using namespace std; ////////////////////////////////////////////////////////////////////////// C99 ...

    Visual C++开发经验技巧宝典(第1章)

    0075 如何设计和使用STL迭代器 31 0076 使用STL需要包含哪些头文件 32 0077 STL简单应用 32 1.10 C++.NET语法 33 0078 在C++.NET中如何判断空指针 33 0079 C++与C++.NET中纯虚函数的区别 33 0080 C++...

    C++/C编程规范

     本书涵盖了C++程序设计的每一个方面,包括设计和编码风格、函数、操作符、类的设计、继承、构造与析构、赋值、名字空间、模块、模板、泛型、异常、STL容器和算法等。书中对每一条规范都给出了言简意赅的概述,并...

    C++ Primer中文版(第5版)李普曼 等著 pdf 1/3

     2.2.2 变量声明和定义的关系 41  2.2.3 标识符 42  2.2.4 名字的作用域 43  2.3 复合类型 45  2.3.1 引用 45  2.3.2 指针 47  2.3.3 理解复合类型的声明 51  2.4 const限定符 53  2.4.1 const的引用 54  ...

    Effective C++

    条款11:为需要动态分配内存的类声明一个拷贝构造函数和一个赋值函数 条款12:尽量使用初始化而不要在构造函数里赋值 条款13:初始化列表中成员列出顺序和它们在类中的声明顺序相同 条款14:确定基类有虚析构函数 条款15...

Global site tag (gtag.js) - Google Analytics