将对象传递给重载运算符

Cod*_*ash 7 c++ oop runtime-error operator-overloading insertion

昨天有人给了我一个错误的节目.在MVS 2010中工作,我发现了问题,也是它的替代方案.问题是重载的插入操作符类.其原型如下......

void matrix :: operator << (matrix&) ;
Run Code Online (Sandbox Code Playgroud)

它是从这样的地方打来的......

matrix m ;
m.operator << (m) ;
Run Code Online (Sandbox Code Playgroud)

我发现编译器不允许发送与调用函数的引用参数相同的对象.但我不明白背后的原因以及它造成了什么问题.如果有人能够解释,我将不胜感激.谢谢.

编辑: 实际发生的是,在调试时,它进入函数内部,在执行时出现main,进入外部依赖文件dbgdel.cpp并在此行停止.

 _ASSERTE(_BLOCK_TYPE_IS_VALID(pHead->nBlockUse));
Run Code Online (Sandbox Code Playgroud)

Jor*_*ans 5

给出的代码编译并运行得很好VS2010 SP1.

如图所示,代码没有问题,这是完全合法的.声明一个运算符重载然后用运算符调用它有点奇怪<<,因为你可以很容易地写m << m.

一些猜测:

  • 您正在获取m运算符实现中某处的地址并意外删除它
  • 您正在超出可能存储在运算符实现中的矩阵中的值数组的边界.
  • 调用代码和被调用代码之间的编译器和链接器假设不匹配.检查您的调用约定,双方运行时库的版本以及SECURE_SCL和Interator调试等任何其他设置.