错误:"模板<类 T>类 Dynamic_Array"在没有模板参数的情况下使用

error: 'template<class T> class Dynamic_Array' used without template parameters

本文关键字:参数 情况下 lt 模板 gt Array 错误 Dynamic      更新时间:2023-10-16

我已经收到此错误一段时间了,我不知道如何解决它。我在堆栈溢出上搜索了类似的问题,但我没有找到任何东西。

源代码:

template <typename T>
class Dynamic_Array
{
private:
    T* actual_array;
    unsigned int number_of_elements;
public:
    Dynamic_Array() {}
    ~Dynamic_Array() {delete[] actual_array;}
    unsigned int get_size() const {return number_of_elements;}
    T& operator [](unsigned int index) {return actual_array[index];}
    void operator +=(T&);
    void operator -=(unsigned int);
};
template <typename T> /*Not sure if this is needed, but compiler doesn't mind, still prints the same error*/
void Dynamic_Array<T>::operator+=(T& object)
{
    if(number_of_elements>1)
    {
        T* temp_array = new T[number_of_elements];
        for(unsigned int i=0;i<number_of_elements;i++)
        {
            temp_array[i]=actual_array[i];
        }
        delete[] actual_array;
        actual_array = new T[number_of_elements+1];
        for(unsigned int i=0;i<number_of_elements;i++)
        {
            actual_array[i]=temp_array[i];
        }
        delete [] temp_array;
        temp_array=NULL;
        actual_array[number_of_elements]=object;
        number_of_elements++;
    }
    else
    {
        number_of_elements++;
        actual_array = new T[1];
    }
}
void Dynamic_Array<T>::operator-=(unsigned int index)
{
    T* temp_array = new T[number_of_elements-1];
    for(unsigned int i=0, j=0;i<number_of_elements;i++)
    {
        if(i!=index)
        {
            temp_array[j]=actual_array[i];
            j++;
        }
    }
    delete[] actual_array;
    number_of_elements--;
    actual_array = new T[number_of_elements];
    for(unsigned int i=0;i<number_of_elements;i++)
    {
        actual_array[i]=temp_array[i];
    }
    delete [] temp_array;
    temp_array = NULL;
}

根据编译器的说法,错误存在于第 18 行("};"和"模板"之间的空值)

正如我所说,我不知道我搞砸了什么,所以任何帮助都值得赞赏。

在类模板声明之外定义成员函数时,需要为每个函数指定模板。 当您定义时

void Dynamic_Array<T>::operator-=(unsigned int index)
{
    //...
}

您还需要具有模板部分,例如

template <typename T>
void Dynamic_Array<T>::operator-=(unsigned int index)
{
    //...
}

这必须存在于您执行的每个函数定义中。 所有定义开头的单个template <typename T>并不适用于所有函数定义。

Dynamic_Array是一个

模板类,因此在类范围之外定义operator+=operator-=时,您需要提供模板类型,如下所示:

template<typename T> void Dynamic_Array<T>::operator+=(T& object) {
    //...
}
template<typename T> void Dynamic_Array<T>::operator-=(unsigned int index) {
    //...
}

另外,我应该注意,将void作为operator+=operator-=的返回类型有点奇怪,通常您应该返回对this的更改实例的引用,即:

template<typename T> Dynamic_Array<T>& Dynamic_Array<T>::operator+=(const T& object) {
    //...
}
相关文章: