我写了一个类模板,但运算符只有在两种类型相同时才起作用。我不知道如何定义头文件和 cpp 文件中的类型。这是我的代码:
头文件:
ArrayList& operator=(ArrayList const&);
cpp文件:
template <class T>
ArrayList<T>& ArrayList<T>::operator=(ArrayList<T> const& other) {
if (this != &other) {
delete [] Array;
Array = new T [other.lenght];
lenght = other.lenght;
std::copy(other.Array, other.Array+lenght, Array);
}
return *this;
}
如果我将 a 和 b 定义为 int,则 a=b 有效。但如果我将 a 定义为 char,则 a=b 不起作用。如何解决这个问题?
编辑::
正如巴里所说,我们必须改变语法。而且我必须在 .cpp 文件末尾更改我的实例化(我使用单独的 .h 和 .cpp 文件)。但问题出在这部分
if (this != &other) {
delete [] Array;
Array = new T [other.lenght];
lenght = other.lenght;
std::copy(other.Array, other.Array+lenght, Array);
}
但我不知道问题出在哪里,如果我在上面发表评论,一切正常,但是......
我得到了这些错误:
错误 C2440:“!=”:无法从“const ArrayList *”转换为“ArrayList *const”
错误 C2248:“ArrayList::lenght”:无法访问在“ArrayList”类中声明的私有成员(3 次)