Я сопоставляю матрицу с одномерным массивом, используя порядок поворота строки
template<class T>
matrix<T> matrix<T>::operator*(const matrix<T>& 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;
}
error:Binary "[" :" matrix "does not define this operator or a conversion to a type acceptable to a predefined operator
Что случилось с моим кодом?
В вашем шаблоне matrix
есть перегруженная функция operator[]
?
О, и вместо того, чтобы начинать циклы с 1
, а затем вычитать 1
везде, где используется индекс, почему бы просто не начинать циклы с 0
?
Не имеет отношения к вашей реальной проблеме. Скорее всего вы хотели j<=m.theCols;
также w[(i - 1)*m.theCols + j - 1]
выглядит подозрительно. Разве не должно быть w.theCols
?
У вас тут опечатка:
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];
// ^^^^^^^^
Можешь показать тоже
operator[]
?