注册 登录
编程论坛 C++ Builder

fatal error C1061: compiler limit : blocks nested too deeply

w2009w 发布于 2015-05-24 15:57, 6208 次点击
我编写的是一个子程序代码,程序结构大体上是这样的:
fo 我编写的是一个子程序代码,程序结构大体上是这样的:
for(int i=M;i<M+1;i++) {
 for(int j=N;j<N+1;j++) {
 for(int k=P-1;k<P;k++) {
 udutox=u[i][j][k]/(1*dx)*(u[i][j][k]-u[i-1][j][k]);
 vdutoy=v[i][j][k]/(1*dy)*(u[i][j][k]-u[i][j-1][k]);
 wdutoz=w[i][j][k]/(2*dz)*(u[i][j][k+1]-u[i][j][k-1]);

 dutotox=(u[i][j][k]-2*u[i-1][j][k]+u[i-2][j][k])/(dx*dx);
 dutotoy=(u[i][j][k]-2*u[i][j-1][k]+u[i][j-2][k])/(dy*dy);
 dutotoz=(u[i][j][k+1]-2*u[i][j][k]+u[i][j][k-1])/(dz*dz);

 ustar[i][j][k]=u[i][j][k]-dt*(udutox+vdutoy+wdutoz-1/Re*(dutotox+dutotoy+dutotoz));
 }
 }
  }
功能就是为了求解三维数组ustar[i][j][k]的值,一共是有125段这样的fou循环,这个是第124个循环,编译错误就指示在这个循环上,请问可能是什么问题?
7 回复
#2
林月儿2015-05-24 16:19
int i=M,j=N,k=P-1;
udutox=u[i][j][k]/(1*dx)*(u[i][j][k]-u[i-1][j][k]);
vdutoy=v[i][j][k]/(1*dy)*(u[i][j][k]-u[i][j-1][k]);
wdutoz=w[i][j][k]/(2*dz)*(u[i][j][k+1]-u[i][j][k-1]);
dutotox=(u[i][j][k]-2*u[i-1][j][k]+u[i-2][j][k])/(dx*dx);
dutotoy=(u[i][j][k]-2*u[i][j-1][k]+u[i][j-2][k])/(dy*dy);
dutotoz=(u[i][j][k+1]-2*u[i][j][k]+u[i][j][k-1])/(dz*dz);
ustar[i][j][k]=u[i][j][k]-dt*(udutox+vdutoy+wdutoz-1/Re*(dutotox+dutotoy+dutotoz));
虽是三重实则一重,嵌套过深错误恐不在此处。
忘楼主看看编译原理,简言之,报错之处可由其他部分导致。
#3
w2009w2015-05-24 17:20
恩,检查了两遍,可能会是主程序上代码错误的影响导致嘛?子程序的代码其实比较简单,结构都是一样,好像没啥错误!
#4
w2009w2015-05-24 22:02
问题已经解决,只要在程序开始的地方,定义三个整型变量interface i,j,k;就行了,后面就不要每次都要定义就OK啦!
#5
林月儿2015-05-24 23:48
楼主…interface是定义接口的…
#6
w2009w2015-05-25 10:33
这样啊 我的意思就是定义三个整型变量 int i,j,k; 我以为int就是interface的缩写,所以是一个意思!在编程的时候这两个是有区别的!
#7
林月儿2015-05-25 10:42
回复 6楼 w2009w
我的意思是interface是java里面用来定义接口的,就像C++里面的virtul虚拟函数。。。楼主,我说多了,sad story。。。
#8
w2009w2015-05-25 10:45
谢谢你啦!以后还望多指导指导!
1