我自己定义了一个矩阵类CMatrix
在头文件中声明了一个操作符重载的
 CMatrix operator + (const CMatrix& x);
 CMatrix& operator +=(const CMatrix& x);
在cpp文件中给出定义。
然后在另外一个类中使用
CMatrix a;
CMatrix b;
CMatrix c;
初始化后调用
a+=b;
没有问题
可换成
c=a+b;
就出现这个连接错,不知道怎么回事,望高手指教。

解决方案 »

  1.   

    (1)CMatrix operator + (const CMatrix& x); 
    可能为CMatrix& operator + (const CMatrix& x); 
    (2)
    可能为没有重载=号运算符
      

  2.   

    我=号是这样重载的:
     CMatrix&  operator=( const CMatrix& x);
      

  3.   

    是不是应该写成
    CMatrix operator + (const CMatrix& x)const; 
      

  4.   

    CMatrix operator + (const CMatrix& x);和CMatrix&  operator=( const CMatrix& x);的实现代码贴上来看看
      

  5.   


    CMatrix  CMatrix::operator+(const CMatrix& x) 
    {
    BOOL success;

    if(m_Matrix==NULL||x.m_Matrix==NULL)
             success=FALSE;
    if((x.m_Colnum!=m_Colnum)||(x.m_Rownum!=m_Rownum))
             success=FALSE;
    int r=m_Rownum;
    int c=m_Colnum;
    int size=r*c;
    double* data=new double[size];
        if(data==NULL)
    success=FALSE;
        ASSERT(success); 
        for(int i=0;i<size;i++)
    {
    data[i]=m_Matrix[i]+x.m_Matrix[i];
    }
        
    return  CMatrix(r,c,data);
    }
    CMatrix& CMatrix::operator =( const CMatrix& x)
    {
     if(x.m_Matrix==NULL)
    return *this; 

     if(&x!=this)
      {
       m_Rownum=x.m_Rownum;
       m_Colnum=x.m_Colnum;
        
       if(m_Matrix)
       {
        delete[] m_Matrix;
       }
       m_Matrix=new double[m_Rownum*m_Colnum];
       if(m_Matrix==NULL)//分配内存失败直接返回
     return *this;
       memcpy(m_Matrix,x.m_Matrix,sizeof(double)*m_Rownum*m_Colnum);
      }
     return *this;}
      

  6.   

    我把重载+号的声明及定义都去掉
    再用c=a+b出现的是同样的错误。
    是不是不去掉的时候也根本没用我重载的+。