二进制'*':找不到全局运算符,它接受类型'统计者'(或者没有可接受的转换)

时间:2010-08-27 21:52:29

标签: c++ operator-overloading

我试图重载我的运算符,它实际上只是一个包含算术函数和一系列数组变量的类。

但是当我重载我的(*)乘法运算符时,我得到了这个错误:

     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...

};

任何帮助都会很棒,谢谢!!

2 个答案:

答案 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的非显式构造函数以启用隐式转换。