C++头文件中的模板类

C++头文件中的模板类

这已是个人第三篇关于头文件的博客了,没想到我仍是踩了个巨坑。数据结构

你们都知道要在头文件里声明类成员,在源文件中实现。对象

可是今天写数据结构做业,在头文件(Stack.h)定义了一个栈的模板类,在源文件(Stack.cpp)实现了相应的功能。可是编译死活不过,怎么改怎么过不了。编译器

结果发现,模板类不能只在头文件里声明,必须在头文件里实现。博客

是不可能只在单独的cpp文件中编写模板类实现并进行编译的。若是有人说能够,那么确定是模仿单独cpp文件使用的办法。实际上,若是打算编写模板类库并做为头文件导入,且隐藏实现,这根本不可能。编译

为何?

由于头文件从不编译,只会进行预处理。而后将预处理完的代码与对应的、实际编译的cpp文件合并。C++中每个对象所占的空间大小,是编译的时候就肯定了。在模板类没有传入数据类型的时候,编译器没法知道该模板类的对象所占用的空间大小。模板

因此在预处理完的头文件和源文件结合的过程当中,编译器是彻底不知道源文件中模板类的空间大小的,可是它须要编译源文件。因此它没法编译下去。数据类型

因此记住,只有模板类真正被使用的时候,编译器才知道模板传入的是什么类型,须要分配多少空间。方法

模板类的实现,若是脱离了具体的数据类型,是绝对不可能单独编译的。更不用说在头文件中声明,在源文件中实现这种不可取的方法了。数据

因此模板类的实现必须所有写在头文件里!文件

固然了,也能够如今头文件的类内部声明,在花括号外面实现。

除非,你想在主文件中,打出 #include "xxxx.cpp"的神奇操做。

相关文章
相关标签/搜索