Я создаю пользовательский класс матрицы с шаблонами для образовательных целей. Я хочу, чтобы мой класс работать следующим образом:двоичный 'оператор *' имеет слишком много параметров
mat*2; //Works
2*mat; //Should also work
В первом случае я имею следующую декларацию
matrix<T> operator*(const T& a) const;
и implemenetation
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)
Пожалуйста, добавьте больше контекста. Мое подозрение в том, что вы поставили 'matrix operator * (T & a, matrix & mat);' в определении класса. –
Попробуйте добавить 'const' к параметрам второй функции? Вероятно, он не может передать неконстантную ссылку на literal '2'. –
Я сделал это и сработал. Могли бы вы оба объяснить, почему это так? Я пытаюсь узнать больше на C++ здесь. :) – msmechanized