错误“无效使用未定义类型'struct cmplx'取消引用指向不完整类型的指针”。怎么解决?

时间:2014-10-09 19:46:02

标签: c pointers

我是C编程的新手,我有一个其他人编写的代码,我只需要让它工作或编译它。

 # 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;
}

我得到的错误是“无效使用未定义类型'struct cmplx'取消引用指向不完整类型的指针” 您可以查看此链接以获取更多信息http://codepad.org/HdbgppgM 请让我知道如何解决它。 请记住,我不知道C,但只有matlab。 谢谢 阿尼尔。

1 个答案:

答案 0 :(得分:0)

pkval = ftdat [ilowpk]; &lt; - 在这里,您将ftdat视为指向 struct cmplx 数组的指针(类似于char *通常是一个字符数组),在一个 struct cmplx 中提取一个定位ilowpk并将其分配给pkval。

您无法从数组中提取结构,因为所有编译器都具有前向声明 - 它不知道结构有多大。因此,它甚至不知道与数组的开头有关的位置。