Я думаю, что это в моей декларации, но я не уверен. Иметь класс «Матрица», который создает 2-мерные массивы типа int. В классе есть несколько перегруженных операторов для выполнения арифметических операций и т. Д. Над объектами класса.
Одним из требований является проверка того, что матрицы имеют одинаковые размеры. Размеры хранятся
как два частных целых «dx» и «dy».
Поэтому, чтобы сделать это эффективным, я написал функцию-член типа bool следующим образом;
bool confirmArrays(const Matrix& matrix1, const Matrix& matrix2);
это заголовок функции и объявление;
bool Matrix::confirmArrays(const Matrix& matrix1, const Matrix& matrix2)
{
if (matrix1.dx == matrix2.dx && matrix1.dy == matrix2.dy)
{
// continue with operation
return true;
} else {
// hault operation, alert user
cout << "these matrices are of different dimensions!" << endl;
return false;
}
}
но когда я звоню confirmArrays
из другой функции-члена я получаю эту ошибку;
Использование необъявленного идентификатора confirmArrays
Вызов функции как так;
// matrix multiplication, overloaded * operator
Matrix operator * (const Matrix& matrix1, const Matrix& matrix2)
{
Matrix product(matrix1.dx, matrix2.dy);
if ( confirmArrays(matrix1, matrix2) )
{
for (int i=0; i<product.dx; ++i) {
for (int j=0; j<product.dy; ++j) {
for (int k=0; k<matrix1.dy; ++k) {
product.p[i][j] += matrix1.p[i][k] * matrix2.p[k][j];
}
}
}
return product;
} else {
// perform this when matrices are not of same dimensions
}
}
Ваш operator*
не определен в рамках Matrix
, Вы на самом деле определили глобальный оператор. Тебе нужно
Matrix Matrix::operator * (const Matrix& matrix1, const Matrix& matrix2)
{
...
}
и тогда все должно быть хорошо. NB. Если бы это было скомпилировано, вы бы получили ошибку «неопределенная ссылка на оператор Matrix :: operator *» компоновщика, поскольку она не была определена.
Функция bool необходима только для поддержки арифметических функций. Некоторые из этих функций могут быть перегруженными участниками, некоторые могут быть друзьями. Хитрость заключалась в том, чтобы определить функцию bool как друга, сделав ее доступной как для прямых функций, так и для функций друзей, сохранив при этом возможность доступа к частным данным члена.
friend bool confirmArrays(const Matrix& matrix1, const Matrix& matrix2);