14.c++-类模板不能让声明和实现分离

我们习惯是.h中放类的函数声明,在.cpp中放类的函数定义,但在类模板中不能这样做,如随手写了个demo测试了下

.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,测试,Class,编译器,fun)