错误:'template <class t =“”>类Dynamic_Array'在没有模板参数的情况下使用

时间:2016-05-23 19:17:06

标签: c++ templates

我已经有一段时间没遇到这个错误了,我也不知道如何修复它。 我在堆栈溢出时搜索了类似的问题,但我找不到任何东西。

源代码:

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行(“};”和“模板”之间的空白

正如我所说,我不知道我搞砸了什么,所以感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

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

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

你需要有模板部分,如

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

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

答案 1 :(得分:0)

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-=的返回类型有点奇怪,通常你应该返回对{{1}的更改实例的引用1}},即:

this