2014-10-09 66 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