在类模板中重载运算符[重复]

问题描述 投票:0回答:1

我编写了一个类模板,但运算符仅在两种类型相同时才起作用。我不知道如何定义头文件和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 定义为字符,则 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 :: length':无法访问类'ArrayList'中声明的私有成员(3次)

c++ class templates operator-overloading overloading
1个回答
6
投票

在你的标题中,而不是:

ArrayList& operator=(ArrayList const&);

做到了

template <typename U>
ArrayList& operator=(ArrayList<U> const&);

右侧应该接受任何类型的 U。同样,cpp 文件应该使用这个很棒的结构:

template <typename T>
template <typename U>
ArrayList<T>& ArrayList<T>::operator=(ArrayList<U> const& other) {
    // clearly uninteresting details here
    return *this;
}
© www.soinside.com 2019 - 2024. All rights reserved.