2017-07-11 9 views
-1

私はRstudioでこの関数をコンパイルするとき、私はこのエラーを取得:関数を定義した後でさえ、Cでの関数の暗黙の宣言は?

Implicit declaration of function 'Hfunc' is invalid in C99. 

私は、この関数のプロトタイプを選択する方法がわかりません。私は次のコード全体で使用Free機能のために同じ

ここ
for(int i=0;i<*n;i++) 
    { 
     if(u[i]<UMIN) u[i]=UMIN; 
     else if(u[i]>UMAX) u[i]=UMAX; 
     if(v[i]<UMIN) v[i]=UMIN; 
     else if(v[i]>UMAX) v[i]=UMAX; 
    } 

それを使用

#define UMAX 1-1e-10 

また、私はそれらの1は既にこのように定義されている他の機能と同じエラーが出ます
void Hfunc(int* family, int* n, double* u, double* v, double* theta, double* nu, double* out) 
{ 
    int j; 
    double *h; 
    h = Calloc(*n,double); 
    double x;  

    for(j=0;j<*n;j++) 
    { 
     if((v[j]==0) | (u[j]==0)) 
      h[j] = 0; 
     else if (v[j]==1) 
      h[j] = u[j]; 
     else 
     { 
      if(*family==0) //independent 
      { 
       h[j] = u[j]; 
      } 
      else if(*family==1) //gaussian 
      { 
       x = (qnorm(u[j],0.0,1.0,1,0) - *theta*qnorm(v[j],0.0,1.0,1,0))/sqrt(1.0-pow(*theta,2.0)); 
       if (isfinite(x)) 
        h[j] = pnorm(x,0.0,1.0,1,0); 
       else if ((qnorm(u[j],0.0,1.0,1,0) - *theta*qnorm(v[j],0.0,1.0,1,0)) < 0) 
        h[j] = 0; 
       else 
        h[j] = 1; 
      } 
      else if(*family==2) //student 
      { 
       double t1, t2, mu, sigma2; 
       t1 = qt(u[j],*nu,1,0); t2 = qt(v[j],*nu,1,0); mu = *theta*t2; sigma2 = ((*nu+t2*t2)*(1.0-*theta*(*theta)))/(*nu+1.0); 
       h[j] = pt((t1-mu)/sqrt(sigma2),*nu+1.0,1,0); 
      } 
      else if(*family==3) //clayton 
      { 
       if(*theta == 0) h[j] = u[j] ; 
       if(*theta < XEPS) h[j] = u[j] ; 
       else 
       { 
        x = pow(u[j],-*theta)+pow(v[j],-*theta)-1.0 ; 
        h[j] = pow(v[j],-*theta-1.0)*pow(x,-1.0-1.0/(*theta)); 
        if(*theta < 0) 
        { 
         if(x < 0) h[j] = 0; 
        } 
       } 
      } 
      else if(*family==4) //gumbel 
      { 
       if(*theta == 1) h[j] = u[j] ; 
       else 
       { 
        h[j] = -(exp(-pow(pow(-log(v[j]),*theta)+pow(-log(u[j]),*theta),1.0/(*theta)))*pow(pow(-log(v[j]),*theta)+pow(-log(u[j]),*theta),1.0/(*theta)-1.0)*pow(-log(v[j]),*theta))/(v[j]*log(v[j])); 
       } 
      } 
      else if(*family==5) //frank 
      { 
       if(*theta==0) h[j]=u[j]; 
       else 
       { 
        h[j] = -(exp(*theta)*(exp(*theta*u[j])-1.0))/(exp(*theta*v[j]+*theta*u[j])-exp(*theta*v[j]+*theta)-exp(*theta*u[j]+*theta)+exp(*theta)); 
       } 
      } 
      else if(*family==6) //joe 
      { 
       if(*theta==1) h[j]=u[j]; 
       else 
       { 
        h[j] = pow(pow(1.0-u[j],*theta) + pow(1.0-v[j],*theta) - pow(1.0-u[j],*theta)*pow(1.0-v[j],*theta),1.0/(*theta)-1) * pow(1.0-v[j],*theta-1.0)*(1-pow(1-u[j],*theta)); 
       } 
      } 
      else if(*family==7) //BB1 
      { 
       double* param; 
       param = Calloc(2,double); 
       param[0]=*theta; 
       param[1]=*nu; 
       int T=1; 
       if(*nu==1) 
       { 
        if(*theta==0) h[j]=u[j]; 
        else h[j]=pow(pow(u[j],-*theta)+pow(v[j],-*theta)-1,-1/(*theta)-1)*pow(v[j],-*theta-1); 
       } 
       else if(*theta==0) 
       { 
        h[j]=-(exp(-pow(pow(-log(v[j]),*nu)+pow(-log(u[j]),*nu),1.0/(*nu)))*pow(pow(-log(v[j]),*nu)+pow(-log(u[j]),*nu),1.0/(*nu)-1.0)*pow(-log(v[j]),*nu))/(v[j]*log(v[j])); 
       } 
       else 
       { 
        pcondbb1(&v[j],&u[j],&T,param,&h[j]); 
       } 
       Free(param); 
      } 
      else if(*family==8) //BB6 
      { 
       double* param; 
       param = Calloc(2,double); 
       param[0]=*theta; 
       param[1]=*nu; 
       int T=1; 
       if(*theta==1) 
       { 
        if(*nu==1) h[j]=u[j]; 
        else h[j]=-(exp(-pow(pow(-log(v[j]),*nu)+pow(-log(u[j]),*nu),1.0/(*nu)))*pow(pow(-log(v[j]),*nu)+pow(-log(u[j]),*nu),1.0/(*nu)-1.0)*pow(-log(v[j]),*nu))/(v[j]*log(v[j])); 
       } 
       else if(*nu==1) 
       { 
        h[j]=pow(pow(1.0-u[j],*theta) + pow(1.0-v[j],*theta) - pow(1.0-u[j],*theta)*pow(1.0-v[j],*theta),1.0/(*theta)-1) * pow(1.0-v[j],*theta-1.0)*(1-pow(1-u[j],*theta)); 
       } 
       else 
       { 
        pcondbb6(&v[j],&u[j],&T,param,&h[j]); 
       } 
       Free(param); 
      } 
      else if(*family==9) //BB7 
      { 
       double* param; 
       param = Calloc(2,double); 
       param[0]=*theta; 
       param[1]=*nu; 
       int T=1; 
       if(*theta==1) 
       { 
        if(*nu==0) h[j]=u[j]; 
        else h[j]=pow(pow(u[j],-*nu)+pow(v[j],-*nu)-1,-1/(*nu)-1)*pow(v[j],-*nu-1); 
       } 
       else if(*nu==0) 
       { 
        h[j] = pow(pow(1.0-u[j],*theta) + pow(1.0-v[j],*theta) - pow(1.0-u[j],*theta)*pow(1.0-v[j],*theta),1.0/(*theta)-1) * pow(1.0-v[j],*theta-1.0)*(1-pow(1-u[j],*theta)); 
       } 
       else 
       { 
        pcondbb7(&v[j],&u[j],&T,param,&h[j]); 
       } 
       Free(param); 
      } 
      else if(*family==10) //BB8 
      { 
       double* param; 
       param = Calloc(2,double); 
       param[0]=*theta; 
       param[1]=*nu; 
       int T=1; 
       if(*nu==0) 
       { 
        h[j]=u[j]; 
       } 
       else if(*nu==1) 
       { 
        if(*theta==1) h[j]=u[j]; 
        else h[j]=pow(pow(1.0-u[j],*theta) + pow(1.0-v[j],*theta) - pow(1.0-u[j],*theta)*pow(1.0-v[j],*theta),1.0/(*theta)-1) * pow(1.0-v[j],*theta-1.0)*(1-pow(1-u[j],*theta)); 
       } 
       else 
       { 
        pcondbb8(&v[j],&u[j],&T,param,&h[j]); 
       } 
       Free(param); 
      } 
      else if(*family==13) //rotated clayton (180?) 
      { 
       if(*theta == 0) h[j] = u[j] ; 
       if(*theta < XEPS) h[j] = u[j] ; 
       else 
       { 
        u[j]=1-u[j]; 
        v[j]=1-v[j]; 
        x = pow(u[j],-*theta)+pow(v[j],-*theta)-1.0 ; 
        h[j] = pow(v[j],-*theta-1.0)*pow(x,-1.0-1.0/(*theta)); // pow(v[j],-*theta-1.0)*pow(pow(u[j],-*theta)+pow(v[j],-*theta)-1.0,-1.0-1.0/(*theta)); 
        h[j]= 1-h[j]; 
        u[j]=1-u[j]; 
        v[j]=1-v[j]; 
       } 
      } 
      else if(*family==14) //rotated gumbel (180?) 
      { 
       v[j]= 1-v[j]; 
       u[j]= 1-u[j]; 
       h[j]= -(exp(-pow(pow(-log(v[j]),*theta)+pow(-log(u[j]),*theta),1.0/(*theta)))*pow(pow(-log(v[j]),*theta)+pow(-log(u[j]),*theta),1.0/(*theta)-1.0)*pow(-log(v[j]),*theta))/(v[j]* log(v[j])); 
       h[j]= 1-h[j]; 
       u[j]=1-u[j]; 
       v[j]=1-v[j]; 
      } 
      else if(*family==16) 
      { 
       v[j]= 1-v[j]; 
       u[j]= 1-u[j]; 
       h[j] = pow(pow(1.0-u[j],*theta) + pow(1.0-v[j],*theta) - pow(1.0-u[j],*theta)*pow(1.0-v[j],*theta),1.0/(*theta)-1) * pow(1.0-v[j],*theta-1.0)*(1-pow(1-u[j],*theta)); 
       h[j]= 1-h[j]; 
       u[j]=1-u[j]; 
       v[j]=1-v[j]; 
      } 
      else if(*family==17) //rotated BB1 
      { 
       double* param; 
       param = Calloc(2,double); 
       param[0]=*theta; 
       param[1]=*nu; 
       int T=1; 
       if(*nu==1) 
       { 
        if(*theta==0) h[j]=u[j]; 
        else 
        { 
         h[j]=pow(pow(1-u[j],-*theta)+pow(1-v[j],-*theta)-1,-1/(*theta)-1)*pow(1-v[j],-*theta-1); 
         h[j]= 1-h[j]; 
        } 
       } 
       else if(*theta==0) 
       { 
        h[j]=-(exp(-pow(pow(-log(1-v[j]),*nu)+pow(-log(1-u[j]),*nu),1.0/(*nu)))*pow(pow(-log(1-v[j]),*nu)+pow(-log(1-u[j]),*nu),1.0/(*nu)-1.0)*pow(-log(1-v[j]),*nu))/((1-v[j])*log(1-v[j])); 
        h[j]= 1-h[j]; 
       } 
       else 
       { 
        v[j]= 1-v[j]; 
        u[j]= 1-u[j]; 
        pcondbb1(&v[j],&u[j],&T,param,&h[j]); 
        u[j]=1-u[j]; 
        v[j]=1-v[j]; 
        h[j]= 1-h[j]; 
       } 
       Free(param); 
      } 
      else if(*family==18) //rotated BB6 
      { 
       double* param; 
       param = Calloc(2,double); 
       param[0]=*theta; 
       param[1]=*nu; 
       int T=1; 
       if(*theta==1) 
       { 
        if(*nu==1) h[j]=u[j]; 
        else 
        { 
         h[j]=-(exp(-pow(pow(-log(1-v[j]),*nu)+pow(-log(1-u[j]),*nu),1.0/(*nu)))*pow(pow(-log(1-v[j]),*nu)+pow(-log(1-u[j]),*nu),1.0/(*nu)-1.0)*pow(-log(1-v[j]),*nu))/((1-v[j])*log(1-v[j])); 
         h[j]= 1-h[j]; 
        } 
       } 
       else if(*nu==1) 
       { 
        h[j]=pow(pow(u[j],*theta) + pow(v[j],*theta) - pow(u[j],*theta)*pow(v[j],*theta),1.0/(*theta)-1) * pow(v[j],*theta-1.0)*(1-pow(u[j],*theta)); 
        h[j]= 1-h[j]; 
       } 
       else 
       { 
        v[j]= 1-v[j]; 
        u[j]= 1-u[j]; 
        pcondbb6(&v[j],&u[j],&T,param,&h[j]); 
        u[j]=1-u[j]; 
        v[j]=1-v[j]; 
        h[j]= 1-h[j]; 
       } 
       Free(param); 
      } 
      else if(*family==19) //rotated BB7 
      { 
       double* param; 
       param = Calloc(2,double); 
       param[0]=*theta; 
       param[1]=*nu; 
       int T=1; 
       if(*theta==1) 
       { 
        if(*nu==0) h[j]=u[j]; 
        else{ 
         h[j]=pow(pow(1-u[j],-*nu)+pow(1-v[j],-*nu)-1,-1/(*nu)-1)*pow(1-v[j],-*nu-1); 
         h[j]= 1-h[j]; 
        } 
       } 
       else if(*nu==0) 
       { 
        h[j] = pow(pow(u[j],*theta) + pow(v[j],*theta) - pow(u[j],*theta)*pow(v[j],*theta),1.0/(*theta)-1) * pow(v[j],*theta-1.0)*(1-pow(u[j],*theta)); 
        h[j]= 1-h[j]; 
       } 
       else 
       { 
        v[j]= 1-v[j]; 
        u[j]= 1-u[j]; 
        pcondbb7(&v[j],&u[j],&T,param,&h[j]); 
        u[j]=1-u[j]; 
        v[j]=1-v[j]; 
        h[j]= 1-h[j]; 
       } 
       Free(param); 
      } 
      else if(*family==20) //rotated BB8 
      { 
       double* param; 
       param = Calloc(2,double); 
       param[0]=*theta; 
       param[1]=*nu; 
       int T=1; 
       if(*nu==0) 
       { 
        h[j]=u[j]; 
       } 
       else if(*nu==1) 
       { 
        if(*theta==1) h[j]=u[j]; 
        else{ 
         h[j]=pow(pow(u[j],*theta) + pow(v[j],*theta) - pow(u[j],*theta)*pow(v[j],*theta),1.0/(*theta)-1) * pow(v[j],*theta-1.0)*(1-pow(u[j],*theta)); 
         h[j]= 1-h[j]; 
        } 
       } 
       else 
       { 
        v[j]= 1-v[j]; 
        u[j]= 1-u[j]; 
        pcondbb8(&v[j],&u[j],&T,param,&h[j]); 
        u[j]=1-u[j]; 
        v[j]=1-v[j]; 
        h[j]= 1-h[j]; 
       } 
       Free(param); 
      } 
      else if(*family==41) 
      { 
       double t1,t2,t3; 
       t1=qgamma(1.0-u[j],*theta,1,1,0); 
       t2=qgamma(1.0-v[j],*theta,1,1,0); 
       t3=pow(pow(t1,*theta)+pow(t2,*theta),(1.0/(*theta))); 
       h[j]=exp(-t3+t1); 
      } 
     } 
     out[j] = MAX(MIN(h[j],UMAX),UMIN); 
    } 
    Free(h); 
} 

助けてください。

+0

これはCかC++ですか? – yizzlez

+0

Cの質問があるときにC++タグを使用しないでください。彼らは異なる言語です。 – NathanOliver

+0

異なるエラーが混在しています。 *フル*ビルドログを編集せずにインクルードしてください。単にコードとしてフォーマットしてください。次に、私たちに見せることができる[最小、**完全**、および検証可能な例](http://stackoverflow.com/help/mcve)を作成してみてください。 –

答えて

3

関数が定義または宣言される前に、関数Hfuncを呼び出しています。

Hfuncの定義を使用する前に移動するか、または使用する前にHfuncの宣言を追加する必要があります。宣言は次のようになります。

void Hfunc(int* family, int* n, double* u, double* v, 
      double* theta, double* nu, double* out); 

すなわち、それは定義のようなものの、関数の本体の代わりに;に見えます。

あなたのFree機能に似たものが必要です。

関連する問題