2015-08-19 3 views
-3

Это новичок в вопросе C++. Я пытаюсь применить FFT к сложным 1D данным, используя FFTW.Ошибка возврата при попытке скомпилировать fftw

# include <stdlib.h> 
# include <stdio.h> 
# include <time.h> 
#include <fftw3.h> 

int main(void) 
{ 
int i; 
int N=100; 
fftw_complex *in; 
fftw_complex *out; 
    fftw_plan plan_forward; 
unsigned int seed = 123456789; 
in= (fftw_complex*) fftw_malloc(sizeof(fftw_complex)*N); 
out= (fftw_complex*) fftw_malloc(sizeof(fftw_complex)*N); 
srand (seed); 

    for (i = 0; i < N; i++) 
    { 
    in[i][0] = rand (); 
    in[i][1] = rand (); 
    } 

    plan_forward = fftw_plan_dft_1d (N, in, out, FFTW_FORWARD, FFTW_ESTIMATE); 

    fftw_execute (plan_forward); 

    for (i = 0; i < N; i++) 
    { 
    printf (" %3d %12f %12f\n", i, out[i][0], out[i][1]); 
    } 
     fftw_destroy_plan (plan_forward); 
     fftw_free (in); 

     fftw_free (out); 
     return; 
    } 

После компиляции я получаю эту ошибку:

об ошибке: возвратное заявление без значения, в функции, возвращающий ВНУТР [-fpermissive] возвращения;

Я понятия не имею, как исправить эту ошибку. Любая помощь будет оценена по достоинству. Благодарю.

ответ

1

Это должно быть

int N=100; 

(обратите внимание на ; вместо ,)

И ffftw_malloc, вероятно, следует fftw_malloc (один f удалены в начале).

Кроме того, компилятор должен, вероятно, даст вам номера строк для ошибок, я предлагаю идти к этим линиям и рассматривая их внимательно, так что вы можете научиться делать отладку самостоятельно;)

Наконец, main возвращается int, поэтому оператор return нуждается в значении. (0 должно быть в порядке.) Примечание: Функция main особенна тем, что она имеет неявный return 0; в конце, поэтому это единственная функция с возвращаемым значением, где вам разрешено «упасть с конца». Но если вы используете оператор возврата в main, вы должны указать значение.

+0

Спасибо, я исправил это, но я все еще получаю ошибку: 'ffftw_malloc' не был объявлен в этой области in = (fftw_complex *) ffftw_malloc (sizeof (fftw_complex) * N); – Jack

+0

ОК спасибо, это смущает, все они опечатываются !! но как насчет rror: return-statement без значения, в функции, возвращающей 'int' [-fpermissive] return; ошибка? – Jack

1

Сообщение об ошибке в значительной степени само за себя - вам нужно изменить:

return; 

к:

return 0; 

Причина этого заключается в том, что main возвращает int, поэтому вам нужно значение здесь, т. е. вы не можете просто вернуть «ничего».

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