gpt4 book ai didi

c - 错误: conflicting types for ‘fmin’

转载 作者:行者123 更新时间:2023-11-30 15:07:09 27 4
gpt4 key购买 nike

我在尝试更改基本上可以工作的程序时遇到问题。不久前,我从我的一位(现在是远方) friend 那里得到了这堆程序,它们应该运行得很好。但是,当我尝试编译可能有效的代码时,我收到错误。

程序使用数值食谱中的 nr.h 和 nrutil.h 库,并且都包含声明 fmin

代码是:

#include <stdio.h>
#include <math.h>
#include "recipes/nrutil.h"
#include "recipes/nr.h"


float s(float t, float omega);
float c(float t, float omega);
void DFT(int dir, int N, float** mat);

int main(int argc, char* argv[])
{
int i,j;
int N=100;
float** mat=matrix(1,2,0,N);
float tmp;

for (i=0;i<=N;i++){
tmp=s((1.0*i)/N,1.0);
if (tmp>=0.5) mat[1][i]=0.5;
else if (tmp<=0.5) mat[1][i]=-0.5;
else mat[1][i]=tmp;
mat[2][i]=0.0;
}

DFT(1,N,mat);
DFT(-1,N,mat);
FILE* fout=fopen("test.dat","w+");
/*
for (i=0;i<=N;i++)
fprintf(fout,"%d %0.16e %0.16e %0.16e\n",i
,mat[1][i]
,mat[2][i]
,s((1.0*i)/N,8.5)-mat[1][i]);
*/

for (i=0;i<=N;i++)
fprintf(fout,"%e %0.16e %0.16e %0.16e %d %0.16e\n",(i-N/2)*1.0/N
,mat[1][i]
,mat[2][i]
,sqrt(SQR(mat[1][i])+SQR(mat[2][i]))
,i
,s((1.0*i)/N,1.0));

fclose(fout);

free_matrix(mat,1,2,0,N);
return (0);
}


float s(float t, float omega)
{
return (sin(2*M_PI*omega*t));
}

float c(float t, float omega)
{
return (cos(2*M_PI*omega*t));
}

void DFT(int dir, int N, float** mat)
{
int i,k;
float arg;
float cosarg,sinarg;
float** mat2=matrix(1,2,0,N);

if (dir==1){
for (i=-N/2;i<=N/2;i++){
mat2[1][i+N/2]=0;
mat2[2][i+N/2]=0;
arg=-dir*2.0*M_PI*(float)i/(float)N;
for (k=0;k<N;k++){
cosarg=cos(k*arg);
sinarg=sin(k*arg);
mat2[1][i+N/2]+=mat[1][k]*cosarg-mat[2][k]*sinarg;
mat2[2][i+N/2]+=mat[1][k]*sinarg+mat[2][k]*cosarg;
}
}
for (i=0;i<=N;i++){
mat[1][i]=mat2[1][i]/(float)N;
mat[2][i]=mat2[2][i]/(float)N;
}
}
else{
for (k=0;k<=N;k++){
mat2[1][k]=0;
mat2[2][k]=0;
arg=-dir*2.0*M_PI*(float)k/(float)N;
for (i=-N/2;i<=N/2;i++){
cosarg=cos(i*arg);
sinarg=sin(i*arg);
mat2[1][k]+=mat[1][i+N/2]*cosarg-mat[2][i+N/2]*sinarg;
mat2[2][k]+=mat[1][i+N/2]*sinarg+mat[2][i+N/2]*cosarg;
}
}
for (i=0;i<=N;i++){
mat[1][i]=mat2[1][i];
mat[2][i]=mat2[2][i];
}
}

free_matrix(mat2,1,2,0,N);
}

现在,当我尝试编译该程序时,我收到一条错误消息:

 In file included from nal01a.c:12:0: recipes/nr.h:188:7: error:
conflicting types for ‘fmin’ float fmin(float x[]);

In file included from nal01a.c:10:0: /usr/include/math.h:289:15: note: previous declaration of ‘fmin’ was
here extern double fmin _PARAMS((double, double));

原来的程序员能够运行相同的程序,但我无法编译它。可能是什么原因?我正在尝试用 Cygwin 编译它。

提前非常感谢。

最佳答案

fmin 是 header math.h 中的预定义函数(其参数为 double)。

发生的情况是,您的头文件中有一个名为 "recipes/nr.h" 的用户定义函数,其中有一个名为 fmin 的函数,但具有不同的函数签名。

因此,编译器出错。更改头文件中函数的名称,错误应该会解决。

关于c - 错误: conflicting types for ‘fmin’ ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38449808/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com