warning: passing argument " de incompatible pointer type [activé par défaut]'
J'ai été en regardant autour sur les autres threads en quelque sorte lié à cela, mais de toute façon je n'ai tout simplement pas l'obtenir...
Je voudrais faire quelques FFT sur un ensemble de valeurs que j'ai évalué et écrit ce programme de lire d'abord les valeurs et les enregistrer dans un tableau de taille n
.
int main () {
//some variables and also a bit of code to read the 'messwerte.txt'
printf("Geben sie an wieviele Messwerte ausgelesen werden sollen: ");
scanf("%d", &n);
double werte[n]; //Array der "fertigen" Messwerte
in = fopen ("messwerte.txt","r");
double nul[n]; //Array von nullen
int logN = 14;
l=FFT(logN,&werte,&nul);
}
Dans le même fichier, je fais aussi la FFT, avec l'aide de ce programme:
double FFT (int logN, double *real, double *im) //logN is base 2 log(N) {
//blabla FFT calculation
}
Cependant, quand je compile j'obtiens toujours cette erreur:
gcc FFT.c -lm
FFT.c: In function ‘main’:
FFT.c:94:2: warning: passing argument 2 of ‘FFT’ from incompatible pointer type [enabled by default]
FFT.c:4:8: note: expected ‘double *’ but argument is of type ‘double (*)[(unsigned int)(n)]’
FFT.c:94:2: warning: passing argument 3 of ‘FFT’ from incompatible pointer type [enabled by default]
FFT.c:4:8: note: expected ‘double *’ but argument is of type ‘double (*)[(unsigned int)(n)]’
Car c'est ma première fois de la programmation, je ne sais vraiment pas quel est le problème avec mon code. Vais-je avoir à régler plus de drapeaux pour le compilateur ou des trucs comme ça (parce que j'ai eu à faire ce -lm
des trucs ou il ne se compile pas et dit quelque chose comme pow pas trouvé)?
Aussi j'étais conscient qu'il pourrait y avoir une différence lors de l'écriture sur un Windows ou un Linux de la machine, et je suis en utilisant Linux, Lubuntu 12.10 32 bits si c'est un problème de l'OS.
OriginalL'auteur mitit100 | 2012-12-28
Vous devez vous connecter pour publier un commentaire.
Baisse des arobases à partir de cette ligne.
Le problème est que le
&
opérateur dans ce contexte génère une expression avec un type différent de ce queFFT
attend. FFT attend un pointeur vers un double et&werte
produit un pointeur vers un tableau de N éléments. Donc, pour faireFFT
heureux, juste passerwerte
qui va tranquillement se désintègrent en un pointeur vers le premier élément.Pour plus d'informations sur les pointeurs de tableaux, il y a un C FAQ.
Bon appel.
Merci, maintenant je peux upvote.
Merci beaucoup, le problème est maintenant disparu, n'a même pas supposer que quelqu'un pourrait répondre à cette rapide 😀
OriginalL'auteur cnicutar
werte[]
etnul[]
sont des tableaux, mais le motwerte
lui-même est une adresse du premier élément du tableau. Ainsi, lorsque vous vous&werte
vous essayez de passer d'une adresse de l'adresse (comme @cnicutar souligné, ceci devrait réellement lu le pointeur sur un tableau de N éléments). DONC, il suffit de passerwerte
etnul
sans l'esperluette signes de transmettre l'adresse de ces tableaux.Désolé. Pas l'adresse pour une adresse, je cherchais un bon de libellé de l'adresse du premier élément d'un tableau 2D (qui, comme vous pouvez le voir a peu de sens en lui-même). J'ai trouvé la bonne façon de le mettre dans votre réponse. 😀
OriginalL'auteur varevarao