2013-03-18 160 views
0

我想爲(數學)矩陣類使用參數中給出的函數處理對象的方法,但我被卡在函數指針中!將函數作爲參數傳遞給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(浮動)' 注意到沒有匹配函數void矩陣:: 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); 
+0

您沒有將函數傳遞給'applyProcessOnAll',您在用'3'調用時傳遞'addOne'的返回值。 – enobayram 2013-03-18 15:57:00

回答

2

因爲你float (*g)()不帶任何參數和你addOne需要float說法。將你的函數指針改爲float (*g)(float),現在它應該可以工作。

此外,您應該將函數分配給指針,而不是調用它。

A.applyProcessOnAll(&addOne, 3); //add args argument to `applyProcessOnAll` so you can call `g(arg)` inside. 
+1

謝謝!有效! – 2013-03-18 16:05:20

0

您有兩個問題。

第一個是Tony The Lion指出的那個:你指定該函數不應該帶任何參數,但是你正在使用一個只帶一個參數的函數。

第二個是你打電話applyProcessOnAll帶有函數調用的結果,而不是指向函數的指針。

相關問題