赋值运算符重载 - 错误C2440:'==':无法从'A <t> *'转换为'A <t> * const'</t> </t>

时间:2012-07-09 17:36:50

标签: 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 = ( 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;
    }

它会起作用。当以这种方式调用时,为什么在注释掉的代码中会出现此错误?

1 个答案:

答案 0 :(得分:1)

您错过了部分错误消息。它应该说:

error C2440: '==' : cannot convert from 'A<T> *' [with T = float] to 'A<T> *const' [with T = int]

您可能需要查看构建日志中的附近行以查看其他信息。并且编译器没有使用T两次,但代表两种不同的类型。