2014-10-09 65 views
-1

我是C編程新手,我有一個其他人編寫的代碼,我只需要使它工作或編譯它。錯誤「無效使用未定義類型」struct cmplx'取消引用指向不完整類型的指針「。如何解決它?

# include <stdio.h> 
# include <math.h> 

# define AP_INC  1 
# define H_INC  4 

/* plot the power spectrum */ 
do_peak(ftdat,n_out,recno) 
struct cmplx *ftdat; 
int n_out; 
int recno; 
{ 
extern float del_f; 
extern float del_t; 
extern FILE *pkfile; 
extern int ilowpk; 
extern int ihipk; 
float time; 
float fpeak; 
float pkval; 
int ipeak; 
int i; 

/* find the peak of the spectrum */ 
pkval = ftdat[ilowpk]; 
ipeak = ilowpk; 

if(ilowpk < ihipk){ 
    for(i = ilowpk+1; i < ihipk; i++){ 
     if(ftdat[i] > pkval){ 
      pkval = ftdat[i]; 
      ipeak = i; 
     } 
    } 
} else { 
    for(i = ilowpk+1; i < n_out; i++){ 
     if(ftdat[i] > pkval){ 
      pkval = ftdat[i]; 
      ipeak = i; 
     } 
    } 
    for(i = 0; i < ihipk; i++){ 
     if(ftdat[i] > pkval){ 
      pkval = ftdat[i]; 
      ipeak = i; 
     } 
    } 
} 

/* convert ipeak to a frequency */ 
fpeak = (float)ipeak*del_f; 

/* compute the time */ 
time = (float) recno*del_t; 

/* write to output file */ 
fprintf(pkfile,"%f %g\n",time,fpeak); 
return; 
} 

我得到的錯誤是「無效使用不確定型‘結構CMPLX’提領指向不完全類型的」 你們都可以檢查此鏈接瞭解更多信息http://codepad.org/HdbgppgM 請不要讓我知道如何解決它。請記住,我不知道C但只有matlab。 謝謝 Anil。

+0

請保持一定的風格。此外,該代碼遠非最小... – Deduplicator 2014-10-09 19:47:59

+0

另外,考慮使用原型而不是預ANSI-C編寫C語言。 – Deduplicator 2014-10-09 19:57:39

+0

這就是我使用代碼塊時得到的結果。 – user4126840 2014-10-09 20:10:27

回答

0

pkval = ftdat [ilowpk]; < - 在這裏,您將ftdat視爲一個指向struct cmplx(類似於char *,通常是字符數組)的指針,在位置ilowpk處提取一個struct cmplx並將其指定給pkval。

你不能從數組中提取結構,因爲所有的編譯器都有一個前向聲明 - 它不知道結構有多大。因爲它甚至不知道在哪裏看數組的開頭。

+0

你可以讓我知道如何解決它?謝謝 – user4126840 2014-10-09 20:09:29

+0

你必須提供一個struct cmplx的實現。它可能在某個頭文件中。你將不得不「包含」cmplx.h「'或類似的東西。 – 2014-10-10 03:20:34

+0

添加include'cmplx.h'還沒有修復它。 – user4126840 2014-10-10 06:21:52