昨天有人给了我一个有错误的程序。在 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/