二元'运算符*'参数太多了

时间:2014-10-30 16:16:27

标签: c++ templates operator-overloading

我正在制作一个带有模板的自定义矩阵类,用于教育目的。我想要我的课 以下列方式工作:

mat*2; //Works
2*mat; //Should also work

对于第一种情况,我有以下声明

matrix<T> operator*(const T& a) const;

和实施

template <typename T>
matrix<T> matrix<T>::operator*(const T& a) const{
//Implementation here
}

对于第二种情况,我必须将实现作为非成员类

matrix<T> operator*(T& a, matrix<T>& mat);

实施

template<typename T>
matrix<T> operator*(T& a, const matrix<T>& mat){
    return mat*a;
}

然而,当我尝试编译它时,我使用MSVC

得到以下错误
error C2804: binary 'operator *' has too many parameters
..\main.cpp(33): error C2678: binary '*' : no operator found which takes a left hand operand of      type 'int' (or there is no acceptable conversion)

2 个答案:

答案 0 :(得分:4)

第一个参数类型必须是TT const &

非const 左值引用不能绑定到2(或临时或const对象或引用)这样的文字。< / p>

答案 1 :(得分:2)

根据我的评论:非静态类方法具有类类型的隐式第一个参数(*this)。您定义的运算符是否放在类定义中将具有三个参数(而二进制operator*应该只有2个)。如果将运算符声明放在类定义中,则需要删除第一个参数并直接使用类字段。

相关问题