2

クラス テンプレートを作成しましたが、演算子は 2 つの型が同じ場合にのみ機能します。ヘッダファイルや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 は機能しません。これを解決するには?

編集::

Barry が言ったように、構文を変更する必要があります。そして、.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 回)

4

1 に答える 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;
}
于 2013-04-02T20:28:09.600 に答える