簡體   English   中英

C ++復制構造函數,賦值“ operator =”

[英]C++ copy constructor, assignment 'operator='

我正在嘗試制作副本構造函數或=運算符。 如果我定義一個名為A的矩陣,則另一個定義為B和C,並使用'='運算符作為:

A = B

它的性能很好,但是,如果我使用像:

A = B + C我收到此錯誤:'='沒有匹配函數。

關鍵是當我將符號(=)更改為(==)時,即使在A == B + C的情況下,它也能很好地工作,但是僅使用等號(=)則不起作用! 有任何想法嗎?

在頭文件中:

Simple2DMatrixD (const Simple2DMatrixD& matrixA)
{
   numRows = matrixA.numRows;
   numCols = matrixA.numCols;

   dataArray = new double[numRows * numCols];

   for (int iX = 0; iX < numRows; iX++)
   {
       for (int iY = 0; iY < numCols; iY++)
       {
           dataArray[(iX * numRows) + iY] = matrixA.getElement(iX,iY) ;
       }
   }
}


Simple2DMatrixD & assign (const Simple2DMatrixD & matrixB);
Simple2DMatrixD & sum (const Simple2DMatrixD & matrixA, const Simple2DMatrixD & matrixB);

//附加運算符

friend Simple2DMatrixD operator+ (Simple2DMatrixD & matrixA, Simple2DMatrixD & matrixB)
{
    Simple2DMatrixD matrixTemp(matrixA.numRows, matrixA.numCols);

    matrixTemp.sum(matrixA, matrixB);
    return (matrixTemp);
}

//分配運算符

Simple2DMatrixD & operator= (const Simple2DMatrixD & matrixB)
{
    this->assign(matrixB);
    return (*this);
}

//並在源文件中:

Simple2DMatrixD & Simple2DMatrixD::assign (const Simple2DMatrixD & matrixB)
{

for (int r = 0; r < numRows; r++)
{
    for (int c = 0; c < numCols; c++)
    {
        this->setElement(r, c, matrixB.getElement(r, c));
    }
}
return (*this);

}

//矩陣添加

Simple2DMatrixD & Simple2DMatrixD::sum (const Simple2DMatrixD & matrixA, const Simple2DMatrixD &         
matrixB)
{

// TODO REPLACE WITH COMPAREDIMENSION FUNCTION
if ((this->numRows == matrixB.numRows)
    && (this->numCols == matrixB.numCols)
    )
{

    for (int r = 0; r < matrixA.numRows; r++)
    {
        for (int c = 0; c < matrixA.numCols; c++)
        {
            this->setElement(r, c, matrixA.getElement(r, c) + matrixB.getElement(r, c));
        }
    }
    return (*this);
}
else

{
    throw " Dimensions does not match!";
}

}

您正在濫用friend說明符。 您必須像這樣在類的外部聲明operator+

inline Simple2DMatrixD operator+(Simple2DMatrixD & matrixA, Simple2DMatrixD & matrixB)
{
  Simple2DMatrixD matrixTemp(matrixA.numRows, matrixA.numCols);

  matrixTemp.sum(matrixA, matrixB);
  return (matrixTemp);
}

並在類Simple2DMatrixD中將其聲明為朋友:

class Simple2DMatrixD {
  friend Simple2DMatrixD operator+ (Simple2DMatrixD & matrixA, Simple2DMatrixD & matrixB);
  ...
};

或者,您可以像這樣在類的定義中聲明它:

class Simple2DMatrixD {
  ...

  Simple2DMatrixD operator+(Simple2DMatrixD const &rhs)
  {
    Simple2DMatrixD matrixTemp(rhs.numRows, rhs.numCols);
    matrixTemp.sum(*this, rhs);
    return (matrixTemp);
  }

  ...
};

類外部friend的定義是無效的說明符。

我的直覺告訴我,您的const正確性在某處存在錯誤。 請發布完整的錯誤消息。

聲明不將對象更改為const成員函數。

struct A
{
  float retunrsSomethingButDoesNotChangesA()const; // <- note the const
};

// in cpp:
float A::retunrsSomethingButDoesNotChangesA()const // <- note the const
{
  return 5.5f;
}

如果函數未更改,則使函數的引用參數為const

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM