2015-08-19 1 views
-3

C'est un débutant dans la question C++. J'essaie d'appliquer FFT à des données complexes 1D en utilisant FFTW.Erreur de retour lors de la tentative de compilation 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; 
    } 

Après la compilation Je reçois cette erreur:

erreur: retour déclaration sans valeur, en fonction renvoyant « int » [-fpermissive] retour;

Je n'ai aucune idée de comment corriger cette erreur. Toute aide serait appréciée. Merci.

Répondre

1

Il devrait être

int N=100; 

(notez le ; à la place du ,)

Et ffftw_malloc devrait probablement être fftw_malloc (un f enlevé au début).

En outre, le compilateur devrait probablement vous indiquer la ligne des numéros pour les erreurs, je vous suggère d'aller à ces lignes et les examiner de près, afin que vous puissiez apprendre à faire vous-même le débogage;)

Enfin, main retours un int, donc l'instruction return a besoin d'une valeur. (0 devrait être bon.) Note: la fonction main est spéciale en ce qu'elle a implicitement return 0; à la fin, c'est donc la seule fonction avec une valeur de retour où vous êtes autorisé à "tomber de la fin". Mais si vous utilisez une déclaration de retour dans main vous devez fournir une valeur.

+0

Merci, j'ai corrigé cela mais j'obtiens toujours une erreur: 'ffftw_malloc' n'a pas été déclaré dans cette portée in = (fftw_complex *) ffftw_malloc (sizeof (fftw_complex) * N); – Jack

+0

OK merci, c'est embarrassant, ils étaient tous fautes de frappe !! mais qu'en est-il de rror: return-statement sans valeur, dans la fonction retournant 'int' [-fpermissive] return; erreur? – Jack

1

Le message d'erreur est à peu près explicite - vous devez changer:

return; 

à:

return 0; 

La raison est que main retourne un int, vous avez donc besoin d'un valeur ici, c'est-à-dire que vous ne pouvez pas simplement retourner "rien".