类模板的声明与实现要在同一个文件中

       最近在学数据结构的一些东西,编写顺序表的时候遇到了一个问题,困扰良久,就是类模板声明与实现的问题。笔者开始是根据书上的步骤来敲代码,可是在编译的时候确出现了问题,检查了很多遍,发现自己写的和书上的一个标点符号都没有错,后来在网上大神的帮助下解决了这个问题,现在就和大家分享一下我的经验,直接上代码:

.h文件:

//顺序表的类声明
#define defaultSize 100
template<class T>
class SeqList {
private:
	T* data;               //存放数组
	int maxSize;           //可容纳最大表项的项数
	int current;           //当前表项的最后位置(从0开始)
public:
	SeqList(int sz = defaultSize); //构造函数
	~SeqList() { if (data != nullptr) delete[]data; }
	int getSize();                 //获取maxSize
};

.cpp文件

#include"seqList.h"
#include<iostream>
using namespace std;

//定义构造函数
//通过指定参数sz定义数组长度
template<class T>
SeqList<T>::SeqList(int sz /*= defaultSize*/)
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
通常情况下,模板函数的实现需要放在头文件,以便在编译时进行实例化。但是,有时我们可能希望将模板函数的定义与实现分开,分别放在不同的文件,这就需要使用到 C++ 的模板分离机制。 下面是一个简单的例子,演示如何在 cpp 文件实现模板函数: ```cpp // max.h 头文件 #ifndef MAX_H #define MAX_H template <typename T> T max(T a, T b); #endif // max.cpp 文件 #include "max.h" template <typename T> T max(T a, T b) { return a > b ? a : b; } // main.cpp 文件 #include <iostream> #include "max.h" using namespace std; int main() { int a = 5, b = 3; cout << max(a, b) << endl; double c = 3.14, d = 2.71; cout << max(c, d) << endl; return 0; } ``` 在这个例子,我们将模板函数 max 的定义放在了头文件 max.h ,并在头文件声明了该函数。然后,在 max.cpp 文件,我们实现了 max 函数的具体代码。最后,在 main.cpp 文件,我们通过 include 指令将 max.h 头文件包含进来,以便在 main 函数调用 max 函数。 需要注意的是,在实现文件 max.cpp ,我们不需要再次声明函数,而只需要提供具体的实现。这是因为,当编译器遇到模板函数的调用时,它会根据实参的类型自动实例化模板函数,并生成对应的代码。在这个过程,编译器会检查模板函数的定义和实现是否匹配,如果不匹配则会报错。 需要注意的是,模板函数的实现必须放在头文件或者和头文件一起包含,否则编译器无法生成对应的代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值