分配不完整类型'T'c ++

时间:2018-03-25 02:32:10

标签: c++ templates

我使用原始指针在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)告诉我要做的事情,但是在这里创建一个专门的模板有些不对劲。这样做的正确方法是什么?

1 个答案:

答案 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()

语法上是正确的,但实际上并非如此,请阅读上述文章。