Здравствуйте! Необходимо перегрузить бинарный оператор ^ для транспонирования матрицы. Есть класс матрицы: Код C++ Code: template <class T> class Matrix { T** values; size_t rows; size_t cols; public: Matrix(size_t rows, size_t cols) { if (rows * cols == 0) return; this->rows = rows; this->cols = cols; values = new T* [rows]; for (size_t i = 0; i < rows; i++) { values[i] = new T [cols]; memset(values[i], 0, cols*sizeof(T)); } } } Пытаюсь перегрузить так: Code: T* operator ^(T &values){ trans = new T* [cols]; for (size_t i = 0; i < cols; i++) trans[i] = new T [rows]; for (int i = 0; i < rows; i++) for (int j = 0; j < cols; j++) { if(i == j) continue; trans[j][i] = values[i][j]; } return trans; } Вызываю так: Code: Matrix<int> Matr(Rows, Cols); ... Matr^Matr;// в данном месте ошибка Никак не могу понять в чем дело. Пожалуйста, подскажите как это реализовать.
ты передаешь как аргумент адрес на объект класса Matrix: Code: Matrix<int> Matr(4, 4); Matr^Matr; //<< хотя сам написал Code: T* operator ^(T &values) { /// } ... то есть по твоему получается как то так: Code: int r = 5; Matr^(r); и в перегруженном операторе ^ пишешь: Code: T* operator ^(T &values) { .... trans[j][i] = values[i][j]; // << .... } но ведь Matrix - не матрица и оператор [] не перегружен ------------------------- мб ты это имел ввиду: Code: T** operator^(Matrix<T> &M) { T **trans = new T* [cols]; for (size_t i = 0; i < cols; i++) trans[i] = new T [rows]; for (int i = 0; i < rows; i++) for (int j = 0; j < cols; j++) { if(i == j) continue; trans[j][i] = M.values[i][j]; } return trans; } Code: Matrix<int> Matr(4, 4); Matr^(Matr);