类模板不能让声明和实现分离
2011-05-24 10:11
295 查看
我们习惯是.h中放类的函数声明,在.cpp中放类的函数定义,但在类模板中不能这样做,如随手写了个demo测试了下
.h中代码
.cpp中代码
不调用时运行不会报错,一旦给模板赋予对象:CTemplate<int> test ;
就会提示:无法解析的外部符号.....
原因:因为类模板和函数模板都不是真正的定义,真正的定义是在模板实体化的时候由编译器完成的。如果将模板的定义部分和实现部分分离开来,编译器真正要去完成模板实体化的时候就会因为找不到相应的代码而发生链接错误,所以这是编译器的问题,因为C++标准是要求能实现分离编译的。
所以,类模板还是老老实实在一个.h中声明并定义吧.
.h中代码
#pragma once template <class T> class CTemplate { public: CTemplate(void); ~CTemplate(void); void Fun(T a) ; };
.cpp中代码
#include "StdAfx.h" #include "Template.h" template<class T> CTemplate<T>::CTemplate(void) { } template<class T> CTemplate<T>::~CTemplate(void) { } template<class T> void CTemplate<T>::Fun(T a) { int b = a; }
不调用时运行不会报错,一旦给模板赋予对象:CTemplate<int> test ;
就会提示:无法解析的外部符号.....
原因:因为类模板和函数模板都不是真正的定义,真正的定义是在模板实体化的时候由编译器完成的。如果将模板的定义部分和实现部分分离开来,编译器真正要去完成模板实体化的时候就会因为找不到相应的代码而发生链接错误,所以这是编译器的问题,因为C++标准是要求能实现分离编译的。
所以,类模板还是老老实实在一个.h中声明并定义吧.
相关文章推荐
- 你所不知道的事儿--C++类模板的声明和实现不能分离
- 14.c++-类模板不能让声明和实现分离
- ZT 类模板的声明和实现是不能分离的
- 你所不知道的事儿--C++类模板的声明和实现不能分离
- C++中模板不能把实现和声明放在两个不同的文件下
- 为什么不能将类模板的声明与类模板函数实现分开写?
- C++模板的声明与实现分离 编译错误详解
- 不能将类模板的声明与实现分开写
- C++模板声明和实现为什么不能分开来写
- (了解)类前置声明实现接口和实现分离 必须使用指针 且不能作为基类
- 为什么不能将类模板的声明与类模板函数实现分开写
- 为什么不能将类模板的声明与类模板函数实现分开写
- 【c++模板】模拟实现有模板的双向链表(List)(声明和定义分离)
- 为什么不能将类模板的声明与类模板函数实现分开写
- C++ 模板实现栈数据结构, 用宏将模板类声明与实现分离
- 类模板不能让声明和实现分离
- 类模板不能让声明和实现分离
- C++模板 声明实现分离
- C++ 类模板的声明与实现分离
- C++中模板声明与实现的分离问题