Я хочу создать метод для (математического) матричного класса для обработки объектов с помощью функции, указанной в параметре, но я застрял с указателями функций!Передача функции в качестве параметра методу в C++
Мой код:
#include <iostream>
class Matrix{
public:
Matrix(int,int);
~Matrix();
int getHeight();
int getWidth();
float getItem(int,int);
void setItem(float,int,int);
float getDeterminans(Matrix *);
void applyProcessOnAll(float (*)());
private:
int rows;
int cols;
float **MatrixData;
};
Matrix::Matrix(int width, int height){
rows = width;
cols = height;
MatrixData = new float*[rows];
for (int i = 0;i <= rows-1; i++){
MatrixData[i] = new float[cols];
}
}
Matrix::~Matrix(){}
int Matrix::getWidth(){
return rows;
}
int Matrix::getHeight(){
return cols;
}
float Matrix::getItem(int sor, int oszlop){
return MatrixData[sor-1][oszlop-1];
}
void Matrix::setItem(float ertek, int sor, int oszlop){
MatrixData[sor-1][oszlop-1] = ertek;
}
void Matrix::applyProcessOnAll(float (*g)()){
MatrixData[9][9]=g(); //test
}
float addOne(float num){ //test
return num+1;
}
int main(void){
using namespace std;
cout << "starting...\r\n";
Matrix A = Matrix(10,10);
A.setItem(3.141,10,10);
A.applyProcessOnAll(addOne(3));
cout << A.getItem(10,10);
cout << "\r\n";
return 0;
}
Компилятор дает мне эту ошибку: ошибка: нет подходящей функции для вызова 'Matrix :: applyProcessOnAll (флоат)' примечание: кандидат является: примечание: пустота Матрица :: applyProcessOnAll (с плавающей точкой ()()) примечание: нет известного преобразования для аргумента 1 от 'поплавка' до 'поплавка ()()'
Спасибо за помощь!
Теперь это работает! Благодаря!
Модифицированные ЧАСТИ
void Matrix::applyProcessOnAll(float (*proc)(float)){
for(int i = 0; i <= rows-1;i++)
for(int j = 0; j <= cols-1;j++)
MatrixData[i][j]=proc(MatrixData[i][j]);
}
и главный:
A.applyProcessOnAll(*addOne);
Вы не передаете функцию 'applyProcessOnAll', вы передаете возвращаемое значение' addOne' при вызове с '3'. – enobayram