我使用原始指针在c ++中实现动态数组。我是新手使用模板。为了练习,我决定将该类拆分为两个.hpp和.cpp文件。初始化T数组时,我在源文件中收到以下编译错误:
“不完整类型'T'的分配”
这是头文件:
template <class T>
class DynArray {
public:
DynArray(); //default constructor
private:
T * array; //internal array
int memsize; //number of allocated memory slots
int t_size; //number of occupied memory slots
};
这是源文件:
template <>
DynArray<class T>::DynArray() {
memsize = 2;
t_size = 0;
array = new T[memsize];
}
我对我在源文件中所做的事情感到不舒服。我基本上遵循了我的IDE(xcode)告诉我要做的事情,但是在这里创建一个专门的模板有些不对劲。这样做的正确方法是什么?
答案 0 :(得分:1)
请将此作为起点Why can templates only be implemented in the header file?
阅读关于错误分配不完整类型'T'。请仔细查看代码
template <>
DynArray<class T>::DynArray()
template
没有引入类型T
。类型class T
在第二行引入,第一次在那里提到。您可能知道class T
没有template
是一个前向声明并且是一个不完整的类型,它的大小是未知的,new
不能分配未知大小的内存。应该像这样声明正确的模板类成员
template <class T>
DynArray<T>::DynArray()
语法上是正确的,但实际上并非如此,请阅读上述文章。