我已经有一段时间没遇到这个错误了,我也不知道如何修复它。 我在堆栈溢出时搜索了类似的问题,但我找不到任何东西。
源代码:
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行(“};”和“模板”之间的空白
正如我所说,我不知道我搞砸了什么,所以感谢任何帮助。
答案 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