C++ 赋值运算符重载--错误C2440:'==';:无法从';A<;T>*';至';A<;T>*常数';
以下代码试图显示如何重载赋值运算符:C++ 赋值运算符重载--错误C2440:'==';:无法从';A<;T>*';至';A<;T>*常数';,c++,templates,pointers,C++,Templates,Pointers,以下代码试图显示如何重载赋值运算符: #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
#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;
}
#包括
使用名称空间std;
模板
甲级
{
公众:
A(){};
A(T&obj){value=obj;};
~A(){};
T值;
模板
A和运算符=(A和obj)
{
如果(此==&obj)
归还*这个;
值=对象值;
归还*这个;
}
};
int main()
{
内部温度;
温度=3;
A肌肉对象(温度);
cout您丢失了部分错误消息。它应该说:
error C2440: '==' : cannot convert from 'A<T> *' [with T = float] to 'A<T> *const' [with T = int]
错误C2440:“==”:无法从[T=float]的“A*”转换为[T=int]的“A*const”]
您可能需要查看构建日志中附近的行以查看这些额外信息。编译器使用T
两次,但表示两种不同的类型,这对编译器没有好处。@crashmstr,他没有,他在执行赋值之前使用=
操作符检查对象标识。这在您的上一篇文章中已经得到了回答ious问题的评论。花一分钟阅读答案和评论。提示,由于T
和E
不能是同一类型,该测试将永远不会是true
。此子问题也已在您之前的问题@Hans中得到回答:“如何使用相等运算符”。他在等式检查方面有问题,但他混淆了赋值运算符重载和相等运算符重载。换句话说,问题的标题和第一句话就是我所评论的。
template <typename E>
A<T>& operator = ( A<E> &obj)
{
// if(this == &obj)
// return *this;
value = obj.value;
return *this;
}
error C2440: '==' : cannot convert from 'A<T> *' [with T = float] to 'A<T> *const' [with T = int]