簡體   English   中英

重載()運算符

[英]Overloaded ( ) operator

規范是重載括號()運算符來訪問和分配矩陣的元素,但是,我正在努力弄清楚我的重載函數需要返回什么。

簡介:

//The .h files and everything has been included, my other functions work just not this one
cout << "Test (): " << endl;
m0(0,0) = 17.25;
m0(1,5) = -2.33;
m0(5,5) = 233;   // There is class exception handling I just haven't included it

功能實現:

Matrix* Matrix::operator () (const unsigned int m, const unsigned int n) //We were told they HAD to be unsigned int
{
    Matrix *ptr = &matrix[m][n];
     return ptr;
}

錯誤:

main.cpp: In function ‘int main()’:
main.cpp:59:15: error: lvalue required as left operand of assignment
     m0(0,0) = 17.25;
               ^~~~~
main.cpp:60:16: error: lvalue required as left operand of assignment
     m0(1,5) = -2.33;
                ^~~~
main.cpp:61:15: error: lvalue required as left operand of assignment
     m0(5,5) = 233; // should throw an exception

我理解錯誤說的是什么,所以請不要只是告訴我再讀一遍並修復它。 我實際上並不確定如何修復我的函數返回的內容並使其成為主,因此main中的double值實際上可以分配給某些東西。

提前致謝

如果你在程序中檢查這一行:

m0(0,0) = 17.25;

您正在嘗試為()運算符返回的值分配double值。

這意味着你應該返回一個允許分配一個double值的東西 - 最簡單的方法就是返回一個double。

此外,因為你想為它分配一些東西,你應該返回一個引用 - 否則,你只需返回一個簡單的臨時值,並且不允許賦值。 即使編譯器允許它,您也不會在矩陣中看到更改,因為您將更改臨時值。

我也看到在你當前的實現中,你正在返回一個指針。 指針類似於引用,但是如果你考慮它,你不能直接為指針指向的內存賦值 - 你必須首先取消引用它:

double* d = ...; // points to some memory
*d = 5;

這就是為什么在這種情況下參考更好。

暫無
暫無

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

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