开发者

binary '*' : no global operator found which takes type 'statistician' (or there is no acceptable conversion)

I am trying to overload my operators its really just a class that holds arithmetic functions and a sequence of array variables.

But when i am overloading my (*) multiplication operator i get this error:

     binary '*' : no global operator found which takes type 'statistician' 
(or there is no acceptable conversion)

This happens when my code tries to do: s = 2*u;in main.cpp

where s, and u are statistician classes.开发者_高级运维

statistician = my class

(statistician.h)

class statistician  
{
... other functions & variables...

const statistician statistician::operator*(const statistician &other) const;

..... more overloads...

};

Any help would be awesome thanks!!


Declare a namespace scope operator*, so that you can also have a convertible operand on the left hand side that is not of type statistician.

statistician operator*(const statistician &left, const statistician &right) {
  // ...
}

Needless to say that you should remove the in-class one then, and you need a converting constructor to take the int.


This is exactly why binary operators like * or + should be non-member.

If you did s = u * 2, it would have worked, assuming that you have a non-explicit constructor for statistician that takes a single int argument. However, 2 * u does not work, because 2 is not a statistician, and int is not a class with a member operator*.

For this to work right, you should define a non-member operator* and make it a friend of statistician:


statistician operator*(const statistician &left, const statistician &right);

You also need to either define other versions of operator* that take integers (or whatever other types you wish to be able to "multiply") or define non-explicit constructors for statistician to enable implicit conversion.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜