我构建了一个表示矩阵的类,我覆盖了所有 算术运算符。这是一个重载一元减号
的例子RegMatrix.h:
const RegMatrix operator - ();
RegMatrix.cpp
const RegMatrix RegMatrix::operator - ()
{
RegMatrix newMatrix(*this);
newMatrix *= -1;
return newMatrix;
}
现在,当我在堆栈上实例化对象时,这是完美的:RegMatrix a(3,3,v)
(v是值的向量,无关紧要)。
当我像这样使用new
关键字时(在main.cpp中):
RegMatrix* a = new RegMatrix(3,3,v);
RegMatrix* b = -a; //<---ERROR HERE
我得wrong type argument to unary minus
任何想法为什么会这样?谢谢!
P.S。 另一个问题:'='运算符被复制构造函数自动覆盖,对吧?
答案 0 :(得分:3)
a
的类型为RegMatrix *
,而不是RegMatrix
;如果您要对a
点必须取消引用a
(*a
)的对象应用运算符,请将运算符应用于它(-(*a)
),如果您在堆上想要一个单独的实例,在堆上用new
和复制构造函数创建它的新副本:
RegMatrix* a = new RegMatrix(3,3,v);
RegMatrix* b = new RegMatrix(-(*a));
然而,正如@leftaroundabout在评论中指出的那样,这不是一种在C ++中工作的好方法,根据经验,你可以尝试避免动态分配(它的速度较慢而且需要智能指针)如果你不想要内存泄漏)。