由于某些原因不方便在头文件中直接引入另一个模板类的头文件,但声明变量是需要用到该模板类型,这时候就要用到模板类的前置声明了;
声明方式如下:
namespace xx {
template<typename T>
class CBar;
}
使用方式:
xx::CBar<int> bar_;
但此时可能会报编译错误:
error: field 'bar_' has incomplete type
原因:
此时CBar仅仅是一个前置声明,系统不知道为该类型分配多大空间;正确 的使用方式,是定义一个指针xx::CBar<int> bar_ptr_;
问题解决