过载()运算符
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
我了解错误在说什么,所以请不要只告诉我再次阅读并修复它。我实际上不确定如何修复我的函数正在返回并实现它,以便实际上可以将双重值分配给某物。
预先感谢
如果您在程序中选中此行:
m0(0,0) = 17.25;
您正在尝试为()运算符返回的值分配一个双值。
这意味着您应该返回允许分配双值的东西 - 最简单的方法是返回双重。
另外,由于您想为其分配某些内容,因此您应该返回参考 - 否则,您只需返回一个简单的临时值,而不允许进行分配。即使编译器允许它,您也不会看到矩阵中的更改,因为您会更改临时值。
我还看到,在您当前的实施中,您正在返回指针。指针类似于引用,但是如果考虑到它,则不能将值直接分配给指针指向的内存 - 您必须首先解释它:
double* d = ...; // points to some memory
*d = 5;
这就是为什么在这种情况下引用更好的原因。
相关文章:
- C++Cast运算符过载
- 如何解决不明确的运算符过载问题?
- 屏幕插入运算符<<的运算符过载问题
- 对C++运算符过载的一些疑问
- C++ #include和运算符<<过载错误
- C++使 ostream 和 istream 运算符过载
- 运算符过载上未解决的外部符号
- 在Cython中损坏的非成员运算符过载(特别是操作员==)
- 通过移动分配从算术运算符过载中返回const值
- 避免对模板运算符过载的隐式参数转换
- 如何为类模板定义非成员运算符过载
- 分配运算符过载:返回void与返回参考参数
- 如何使用运算符过载添加类变量和INT变量
- 打印运算符过载失败
- 运算符 + 过载错误.无法返回对对象的引用
- 类内与类外运算符过载
- 使用许多类型运算符过载时,模棱两可的超载
- C++输入运算符过载">>"
- 一元减去运算符过载C++分段错误
- 运算符过载<<问题