我正在制作一个带有模板的自定义矩阵类,用于教育目的。我想要我的课 以下列方式工作:
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)
答案 0 :(得分:4)
第一个参数类型必须是T
或T const &
。
非const 左值引用不能绑定到2
(或临时或const
对象或引用)这样的文字。< / p>
答案 1 :(得分:2)
根据我的评论:非静态类方法具有类类型的隐式第一个参数(*this
)。您定义的运算符是否放在类定义中将具有三个参数(而二进制operator*
应该只有2个)。如果将运算符声明放在类定义中,则需要删除第一个参数并直接使用类字段。