我是c的新手,以下是让我感到悲伤的一切:
int i,j,ll,k;
double ddim,ddip,ddjm,ddjp,ddlm,ddlp;
for(i=1; i<(mx-1); i++){
for(j=1; j<(my-1); j++){
for(ll=1; ll<(mz-1); ll++){
ddim=0.5*k
ddip=0.5*k
ddjm=0.5*k
ddjp=0.5*k
ddlm=0.5*k
ddlp=0.5*k
Wijl(i,j,ll) = ((1.0/h_x)*(ddip) \
((1.0/h_x)*(ddim)) \
((1.0/h_y)*(ddjp)) \
((1.0/h_y)*(ddjm)) \
((1.0/h_z)*(ddlp)) \
((1.0/h_z)*(ddlm)) ;
}
}
}
然后我用gcc使用python和scipy编译它,传递它未初始化的所有内容,但我知道问题出在代码的1.0 / h_x部分。如果我使用python / gcc编译基本的c语句就行了,所以我没有python / gcc问题。
我得到的错误是:“错误:'运营商/'在'1.0e + 0 / h_x'中的模糊重载
似乎它正在尝试进行分配重载,而我想做的就是分裂!
任何帮助将不胜感激! :)
谢谢,
泰勒
答案 0 :(得分:1)
我认为它试图说不清楚h_x是什么类型,所以它不知道使用哪个重载/运算符(double / int,double / double等)。你可以尝试将它(h_x)转换为int或double来告诉它使用什么版本。
答案 1 :(得分:0)
如果h_x
为float
,则将1.0
(默认为double
)除以它会让C想知道是以浮点运算还是双数学运算。
如果您想在花车中执行此操作,请将1.0
更改为1.0f
;如果加倍,请将h_x
声明或投射到double
。
如果h_x
是int
(这就是我害怕的话)你可能会把你的h_?
分配到三个相应的浮点或双倍温度变量之外循环,以保存编译器(可能)执行大量不必要的int-to-float转换。作为副作用,这会使你的类型歧义消失。
您还可以通过删除那些1.0
来简化代码:您可以简单地将这些表达式除以h_whatever
,而不是乘以倒数。特别是因为每条线的右半部分已经做了类似的事情。
答案 2 :(得分:0)
我强烈建议你仔细查看所有完全冗余的括号,仔细检查剩下的内容。
例如,此代码段:
((1.0/h_x)*(ddim)*((q(i,j,ll) - q(i-1,j,ll)))/h_x)
归结为:
ddim * (q(i,j,ll) - q(i-1,j,ll)) / h_x / h_x
请注意,/ h_x
两次出现的原始分离让人不知道原意是什么。