#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];
// ^^^^^^^^