问题描述
写c++类时,习惯将类的声明与实现放在不同的文件中(*.h;*.cpp),所以在写模板类时,我也习惯性的这么做。编译后,提示无法解析的外部符号,
解决方案一
将模板类的声明与实现放在同一个*.h文件中
解决方案二
保持声明与实现放在不同的文件中,但是需要在*.h文件的最后include实现文件,实现文件的后缀名不能用*.cpp,不同编译不过,如下,
*.h文件
#ifndef TEMPLATE_HEAD_FILE #define TEMPLATE_HEAD_FILE #include <vector> template <class T> class Template { public: Template(); virtual ~Template(); void Add(const T& val ); T First(); private: std::vector<T> m_List; }; #include "Template.impl" #endif //TEMPLATE_HEAD_FILE
Template.impl文件
template <class T> Template<T>::Template() { } template <class T> Template<T>::~Template() { } template <class T> void Template<T>::Add(const T& val ) { m_List.push_back( val ); } template <class T> T Template<T>::First() { if( m_List.empty() ) { return T(); } return m_List.at(0); }