2010-08-27 213 views
2

我想重载我的操作符它真的只是一个类,它包含算术函数和一个数组变量序列。二进制'*':没有找到全局运算符,它需要类型'统计'(或没有可接受的转换)

但是当我我的过载(*)乘法算我得到这个错误:

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

这发生在我的代码试图做的事:s = 2*u;在main.cpp中

其中s和u是统计学课程。

统计学家=我的课

(statistician.h)

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

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

..... more overloads... 

}; 

任何帮助将是真棒谢谢!

回答

5

声明命名空间范围operator*,这样你也可以有一个敞篷操作上右手边是statistician类型的不行。

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

不用说,你应该删除的课堂之一,那么,你需要一个转换构造函数取int

4

这正是为什么二元运算符如*或+应该是非成员。

如果你没有s = u * 2,它会工作,假设你有statistician接受单个int参数非显式构造。但是,2 * u不起作用,因为2不是statistician,而int不是成员operator*的类。

对于这个工作吧,你应该定义一个非成员operator*,并使其成为friendstatistician的:


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

您还需要可以定义取整数(或任何其他的operator*其他版本您希望能够“相乘”的类型)或为statistician定义非显式构造函数以启用隐式转换。

相关问题