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]