Ошибки функции-члена C ++ «Необъявленный идентификатор» при использовании в другой функции-члене

Я думаю, что это в моей декларации, но я не уверен. Иметь класс «Матрица», который создает 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
}
}

0

Решение

Ваш operator* не определен в рамках Matrix, Вы на самом деле определили глобальный оператор. Тебе нужно

Matrix Matrix::operator * (const Matrix& matrix1, const Matrix& matrix2)
{
...
}

и тогда все должно быть хорошо. NB. Если бы это было скомпилировано, вы бы получили ошибку «неопределенная ссылка на оператор Matrix :: operator *» компоновщика, поскольку она не была определена.

1

Другие решения

Функция bool необходима только для поддержки арифметических функций. Некоторые из этих функций могут быть перегруженными участниками, некоторые могут быть друзьями. Хитрость заключалась в том, чтобы определить функцию bool как друга, сделав ее доступной как для прямых функций, так и для функций друзей, сохранив при этом возможность доступа к частным данным члена.

friend bool confirmArrays(const Matrix& matrix1, const Matrix& matrix2);

0

По вопросам рекламы [email protected]