2014-10-09 2 views
-1

Я новичок в программировании на языке C, и у меня есть код, который кто-то написал, и мне просто нужно заставить его работать или скомпилировать его.ошибка "недопустимое использование указателя разметки unsetfined типа 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

какой-нибудь согласованный style пожалуйста. Кроме того, этот код далек от минимального ... – Deduplicator

+0

Также рассмотрите возможность написания C с прототипами вместо pre-ANSI-C. – Deduplicator

+0

Это то, что я получил, когда использовал код. – user4126840

ответ

0

pkval = ftdat [ilowpk]; < - здесь вы обрабатываете ftdat как указатель на массив struct cmplx (аналогично char *, обычно являющемуся массивом символов), извлекая один struct cmplx в позиции ilowpk и назначая его pkval.

Вы не можете извлечь структуру из массива, потому что весь компилятор имеет объявление вперед - он не знает, насколько велика структура. Из-за этого он даже не знает, где искать, относящийся к началу массива.

+0

Не могли бы вы дать мне знать, как это исправить? Спасибо – user4126840

+0

Вы должны обеспечить реализацию struct cmplx. Вероятно, в каком-то файле заголовка. Вам придется «включать» cmplx.h »или что-то подобное. –

+0

Добавление include 'cmplx.h' еще не исправило. – user4126840

Смежные вопросы