2014-02-10 47 views
1

顯示的錯誤是:VS C++ - 錯誤LNK2001:解析外部符號

error LNK2001: unresolved external symbol "void __cdecl gerarPadroesTeste(double * const,double,int (* const)[31])" ([email protected]@[email protected]@Z) 

我現在的頭文件:

#define K 16 
#define NR_PONTOS 9 
#define NR_REP_TOTAL 100000 

#define theta 0.50 
#define tau 16 
#define beta 6 


int unif(); 
int somaMod2(int a, int b); 
double gaussiana(double m, double sd); 
double calcularPi(double zi, double variancia, bool computeBeta); 

void gerarResultados(double snrdb, double ber, double wer, int nerrb, int nerrw, char* s); 

void read_p(); 
void generate_gf(); 
void gen_poly(); 

void encode_bch(int u[], int rd[]); 
void unirPalavraCodigo(int u[], int rd[], int c[]); 
void decode_bch(int y[]); 
void canalAWGN(double x[], double r[], double sd); 
void chase(double r[N], int y[N], double variancia, int z[K]); 
void gerarPadroesTeste(double r[N], double variancia, int pTeste[][N]); 
double distanciaEuclidiana(double r[], int y[]); 

void modularBPSK(int c[], double x[], double e); 
void demodularBPSK(double r[], int y[]); 

int pesoHamming(int a[]); 
bool isValid(int yt[]); 

double modulo(double n); 

而且我.cpp文件具有的所有方法的實現。我將在這裏複製調用失敗的方法,該方法和方法本身:

void gerarPadroesTeste(int r[N], double variancia, int pTeste[][N]) 
{ 
    double p[N]; 
    double aux; 

    for (int a = 0; a < N; a++){ 
     double mr = -modulo(r[a]); 
     aux = calcularPi(mr, variancia, false); 
     if (aux <= 0.5 - theta) 
      p[a] = 0; 
     else if (aux >= 0.5 + theta) 
      p[a] = 1; 
     else 
      p[a] = calcularPi(mr, variancia, true); 
    } 

    for (int b = 0; b < tau; b++){ 
     for (int c = 0; c < N; c++){ 
      double k = rand(); 
      if (k/RAND_MAX <= p[c]) 
       pTeste[b][c] = 0; 
      else 
       pTeste[b][c] = 1; 
     } 
    } 
} 

void chase(double r[N], int y[N], double variancia, int z[K]) 
{ 
    int pTeste[tau][N]; 
    gerarPadroesTeste(r, variancia, pTeste); 

    int i,j,m; 
    int yt[N]; 
    int lambda[tau][N]; 

    for (i = 0; i < tau; i++){ 
     for (j = 0; j < N; j++){ 
      lambda[i][j] = -1; 
     } 
    } 

    bool valido; 
    for (i = 0; i < tau; i++){ 
     for (j = 0; j < N; j++){ 
      yt[j] = somaMod2(y[j],pTeste[i][j]); 
     } 

     decode_bch(yt); 

     valido = isValid(yt); 

     if (valido) { 
      for (j = 0; j < N; j++){ 
       lambda[i][j] = yt[j]; 
      } 
     } 
    } 

    double minimo = 10000; 

    for (i = 0; i < tau; i++){ 
     if (lambda[i][0] == -1) 
      continue; 
     else{ 
      for (j = 0; j < N; j++){ 
       yt[j] = lambda[i][j]; 
      } 

      if (distanciaEuclidiana(r,yt) < minimo){ 
       minimo = distanciaEuclidiana(r,yt); 
       for (m = 0; m < K; m++){ 
        z[m] = yt[m+length-K]; 
       } 
      } 
     } 
    } 
} 

回答

2

在你的頭,你宣佈

void gerarPadroesTeste(double r[N], double variancia, int pTeste[][N]); 

但在你的CPP您定義

void gerarPadroesTeste(int r[N], double variancia, int pTeste[][N]) 

所以第一個參數double [N]的版本定義仍然丟失。

+0

非常感謝。我怎麼錯過了?現在正在工作。 – Minoru

相關問題