c++ - 将对象传递给重载运算符

标签 c++ oop operator-overloading runtime-error insertion

昨天有人给了我一个有错误的程序。在 MVS 2010 中工作时,我发现了问题及其替代方案。问题是类的重载插入运算符。它的原型(prototype)如下……

void matrix :: operator << (matrix&) ;

它是从这样的地方调用的......

matrix m ;
m.operator << (m) ;

我发现编译器不允许发送相同的对象作为调用函数的引用参数。但我不明白这背后的原因,也不知道它会产生什么问题。如果有人能解释一下,我将不胜感激。 谢谢。

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

 _ASSERTE(_BLOCK_TYPE_IS_VALID(pHead->nBlockUse));

最佳答案

给定的代码在 VS2010 SP1 中编译和运行得很好.

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

一些猜测:

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

关于c++ - 将对象传递给重载运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12390850/

相关文章:

c++ - Qt/C++ 将QString转为十进制

c++ - 如何避免将 const-ref 返回到缓存中的临时文件

ruby - 我如何捕获对 super 的引用并将其传递?

java - 如何将一个 Pane 连接到另一个 Pane

javascript - 在 Node.js 中扩展类的直接方法

operator-overloading - C++ std::map 使用运算符[]设置和获取

c++ - 带有 DBTIMESTAMP 变量的 DDX_Text,我需要引用哪个库?

c++ - 我怎样才能画一个矩形?

c# - C#如何处理运算符重载

java - 如何在java中重载相等并打印?