0

代入演算子をオーバーライドして自己代入テストを実行しようとしていますが、VC++ Express 2010 では、以下に示すように、コードに対して次のエラーが表示されます。

1>c:\users\fatak\documents\visual studio 2010\projects\ray tracer\ray tracer\test.h(22): エラー C2440: '==': 'const Test *' から 'Test *' に変換できませんconst '

#ifndef __TEST_H__
#define __TEST_H__

template <class T = unsigned int> class Test
{
public:
Test() : dummy(0U) {};
template <class U> Test(U value) : dummy(T(value)) {};
~Test() {};

template <class U> Test<T> &operator=(const Test<U> &rhs);

T getValue(void) const {return dummy;};

template <class U> friend class Test;
private:
T dummy;
};

template <class T> template <class U> Test<T> &Test<T>::operator=(const Test<U> &rhs)
{
if(this == &rhs)
    return *this;

dummy = T(rhs.dummy);

return *this;
}

#endif //__TEST_H__

オペランドをテンプレート化されたオーバーライド代入演算子に変更しても、次のようになります。

template <class T> template <class U> Test<T> &Test<T>::operator=(Test<U> & const rhs)

次のエラーが表示されます。

1>c:\users\fatak\documents\visual studio 2010\projects\ray tracer\ray tracer\test.h(22): エラー C2440: '==': 'Test *' から 'Test *const' に変換できません'

理由はありますか?または、誰でも自己割り当てテストを成功させるにはどうすればよいですか?

乾杯!

4

1 に答える 1

1

タイプTest<T>Test<U>はまったく異なるタイプです (T が U でない場合)。

ポインターを無関係な型と比較することはできません。関係のない型が同じアドレスに存在することはできないため、それらはとにかく同じではありません!


operator=(const Test<T>&)おそらく、必要に応じて自己割り当てをテストする非テンプレートと、テストを必要operator=(const Test<U>&)としないものを用意する必要があります。

于 2012-04-10T17:00:40.440 に答える