-2
以下代碼試圖展示如何重載賦值操作符:賦值運算符重載 - 錯誤C2440: '==':不能轉換從 'A <T> *' 到 'A <T> * const的'
#include <iostream>
using namespace std;
template <typename T>
class A
{
public:
A() {};
A(T &obj) {value = obj;};
~A() {};
T value;
template <typename E>
A<T>& operator = (A<E> &obj)
{
if(this == &obj)
return *this;
value = obj.value;
return *this;
}
};
int main()
{
int temp;
temp = 3;
A<int> myobjects(temp);
cout<<myobjects.value<<endl;
float f_value;
f_value = 10.7;
A<float> fobjects(f_value);
myobjects = fobjects;
cout<<myobjects.value<<endl;
return 0;
}
然而,當我與VC10編譯它,我發現了以下錯誤:
error C2440: '==' : cannot convert from 'A<T> *' to 'A<T> *const '
如果我改變了重載函數以下列方式:
template <typename E>
A<T>& operator = (A<E> &obj)
{
// if(this == &obj)
// return *this;
value = obj.value;
return *this;
}
它會工作。當以這種方式調用此註釋代碼時,爲什麼會發生此錯誤?
http://stackoverflow.com/questions/11399832/why-operator-overloading-fails – 2012-07-09 17:39:55
@crashmstr,他不是,他在使用'=='操作符來檢查對象身份之前做任務。 – 2012-07-09 17:41:12
這已在您上一個問題的評論中得到解答。花一點時間閱讀答案和評論。提示,因爲'T'和'E'不能是同一類型,所以這個測試永遠不會是'true'。 – 2012-07-09 17:41:48