Я перегружаю функцию operator*() для вычисления суммы двух матриц, но компилятор выдает запрос на эту ошибку

#c

#c

Вопрос:

Я сопоставляю матрицу с одномерным массивом, используя порядок поворота строк

 template<class T>
matrix<T> matrix<T>::operator*(const matrix<T>amp; m) const {
    if (theCols != m.theRows) throw exception();
    matrix<T> w(theRows, m.theCols);
    for (int i = 1; i <= theRows; i  ) {
        for (int j = 1; j < m.theCols; j  ) {
            for (int k = 1; k <= theCols; k  ) {
                w[(i - 1)*m.theCols   j - 1]  = element[(i - 1)*theCols   j - 1] * m.element[(k - 1)*m.theCols   j - 1];
            }
        }
    }
    return w;
}
  

ошибка: двоичный файл «[» : » matrix » не определяет этот оператор или преобразование в тип, приемлемый для предопределенного оператора

Что случилось с моим кодом?

Комментарии:

1. Можете ли вы также показать operator[] ?

2. У вашего matrix шаблона есть перегруженная operator[] функция?

3. О, и вместо того, чтобы начинать ваши циклы с 1 , а затем вычитать 1 везде, где используется индекс, почему бы просто не запустить циклы 0 ?

4. Не имеет отношения к вашей реальной проблеме. Скорее всего, вы хотели j<=m.theCols;

5. также w[(i - 1)*m.theCols j - 1] выглядит подозрительно. Не должно ли этого быть w.theCols ?

Ответ №1:

Здесь у вас опечатка:

            w[(i - 1)*m.theCols   j - 1]  = element[(i - 1)*theCols   j - 1] * m.element[(k - 1)*m.theCols   j - 1];
  //       ^^^^
  

Вы, вероятно, имеете в виду:

             w.element[(i - 1)*m.theCols   j - 1]  = element[(i - 1)*theCols   j - 1] * m.element[(k - 1)*m.theCols   j - 1];
//           ^^^^^^^^