我试图重载我的运算符,它实际上只是一个包含算术函数和一系列数组变量的类。
但是当我重载我的(*)乘法运算符时,我得到了这个错误:
binary '*' : no global operator found which takes type 'statistician'
(or there is no acceptable conversion)
当我的代码尝试执行此操作时:main.cpp中的s = 2*u;
其中s和u是统计学家类。
统计学家=我的班级
(statistician.h)
class statistician
{
... other functions & variables...
const statistician statistician::operator*(const statistician &other) const;
..... more overloads...
};
任何帮助都会很棒,谢谢!!
答案 0 :(得分:5)
声明命名空间作用域operator*
,这样你也可以在左手边有一个可转换操作数,该操作数不是{{1}类型}。
statistician
毋庸置疑,你应该删除课堂上的那个,然后你需要一个转换构造函数来获取statistician operator*(const statistician &left, const statistician &right) {
// ...
}
。
答案 1 :(得分:4)
这正是像*或+这样的二元运算符应该是非成员的原因。
如果你做了s = u * 2
,假设你有一个statistician
的非显式构造函数,只需要一个int
参数就行了。但是,2 * u
不起作用,因为2不是statistician
,而int
不是具有成员operator*
的类。
为了使其正常工作,您应该定义一个非成员operator*
并将其设为friend
statistician
:
statistician operator*(const statistician &left, const statistician &right);
您还需要定义采用整数的operator*
的其他版本(或您希望能够“乘法”的任何其他类型)或定义statistician
的非显式构造函数以启用隐式转换。