2014-04-06 127 views
0

我有一個將void指針作爲參數的函數。所以我傳遞給這個函數一個結構體,但是在那個函數內部,我調用了另一個函數(f_pD),它將一個結構體(struct)作爲參數。 函數f_mD1內部,我重置我的結構,然後我調用f_pD函數作爲參數結構。一旦我在主函數中完成,我不想重置我的結構。誰能幫我?代碼草圖如下。 enter code here將void指針和結構傳遞給函數-C++

#include <fstream> 
    #include <map> 
    using namespace std; 

    struct pr_pD { 
     int last; double xD; map <double, double> tab_w; 
    } geral; 

    double f_pD (double, double, double, double, struct pr_pD geral); 
    double f_mD1 (double, double, double, double, struct pr_pD geral); 

    static int Integrand_pD(const int *ndim, const double k[], const int *ncomp, double FG[], void *parametros) 
    { 
     struct pr_pD * fp = (struct pr_pD *)parametros;    
     FG[0] = fp->last*fp->xD;  
    } 

static int Integrand_mD1(const int *ndim, const double k[], const int *ncomp, double F[], void *parametros) 
{ 
    struct pr_pD * fp = (struct pr_pD *)parametros; 

    // ------------------------------------------- 
    // I want to eliminate this part of the code 
    struct pr_pD geral; 

    geral.tab_w = fp->tab_w; 
    geral.last = fp->last; 
    geral.xD = fp->xD;  
    //---------------------------------------------- 
    double pD; 

    pD = f_pD(fp->xD*k[1], fp->last*k[2], k[3], k[0], geral); 

    F[0] = 2*pD;  

} 
int main() 
{ 
    tab_w.insert(pair<double, double>(1 , 2)); 
    geral.tab_w = tab_w;  
    geral.last  = 1; 
    geral.xD  = 2.5; 


    double mD1 
    mD1 = f_mD1(1, 1, 1, 0.1, geral); 

    return 0; 
} 

double f_pD(double xD, double yD, double zD, double tD, struct pr_pD geral) 
{ 
    double val_int; 
    val_int = Cuhre(Integrand_pD, xD, yD, zD, tD); 
    return geral.last*val_int; 
} 

double f_mD1(double xD, double yD, double zD, double tD, struct pr_pD geral) 
{ 
    double val_int; 
    val_int=Vegas(Integrnd_mD1, xD, yD, zD, tD); 
    return geral.last*val_int;  
} 

回答

0

您可以使用* FP,而不是總行參數,只是忽略你說你想擺脫的代碼。

pD = f_pD(fp->xD*k[1], fp->last*k[2], k[3], k[0], *fp); 

順便說一句,這些功能不修改其總行的參數,因此可以接受引用,參數,避免潛在的昂貴的副本:

double f_pD(double xD, double yD, double zD, double tD, const pr_pD& geral)