gpt4 book ai didi

c++ - 重载 ( ) 运算符

转载 作者:行者123 更新时间:2023-11-30 02:23:37 25 4
gpt4 key购买 nike

规范是重载括号 () 运算符以访问和分配矩阵的元素,但是,我正在努力弄清楚我的重载函数需要返回什么。

主要内容简介:

//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;

这就是为什么在这种情况下引用更好。

关于c++ - 重载 ( ) 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46011053/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com