以下代码尝试说明如何重载赋值运算符:
#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;
}
它会起作用。当以这种方式调用时,为什么在注释掉的代码中会出现此错误?
答案 0 :(得分:1)
您错过了部分错误消息。它应该说:
error C2440: '==' : cannot convert from 'A<T> *' [with T = float] to 'A<T> *const' [with T = int]
您可能需要查看构建日志中的附近行以查看其他信息。并且编译器没有使用T
两次,但代表两种不同的类型。