Stworzyłem klasę Matrix
, która zasadniczo reprezentuje macierz matematyczną. W celu wykorzystania mnożenie skalarne matrycy, mam przeciążony *
operatora:Przeciążanie * operatora do pracy zarówno na prawo jak i na lewo
Matrix Matrix::operator*(double scalar) const
{
Matrix result(*this);
result *= scalar;
return result;
}
Aby uczynić pracę operatora od lewej, jak również, użyłem:
Matrix operator*(double a, const Matrix &M)
{
return M * a;
}
Biorąc Matrix M
i double s
, M * s
działa dobrze, ale s * M
daje mi błąd:
Error C2677: binary
*
: no global operator found which takes typeMatrix
(or there is no acceptable conversion)
podczas IDE pokazuje mi błąd: "no operator *
dopasowuje te argumenty".
Każdy pomysł, jaki może być problem?
Edytuj: To był głupi błąd! Nie zadeklarowałem operatora w nagłówku, a kompilator nie widział deklaracji! Bardzo przepraszam za to ...
Pełny kod przykładowy. Nie zdefiniowałeś typu zwrotu dla swojej pierwszej definicji operatora? – Sebastian
@Sebastian, To był literówka i poprawiłem to. Otrzymuję ten błąd w moim kodzie, gdzie mam mIIdevCon = mIIcon - one3 * mIIvol gdzie mIIdevCon, mIIcon, mIIvol są obiektami Matrix, a one3 to "const double Matrix :: one3 = 1.0/3.0;" – Alborz
Nie mogę osiągnąć ideału, aby podać przykład, ale twój kod kompiluje się lokalnie dla mnie za pomocą prostej podwójnej matrycy *. Czy możesz stworzyć prostą, powtarzalną próbkę? –