什么原因导致mql4中的堆栈溢出错误? - 页 2

 
RaptorUK:
如果你不想贴出所有的代码,这样就可以重现这个错误,请贴出一些可以重现同样错误的完整代码。


请看我在这之前的帖子。
 
你的附件
11/13/2013 03:25 PM 37,911 Ind_error_tester.mq4
11/13/2013 03:25 PM 37,911 Ind_error_tester_Neutralized.mq4
两个文件都是一样的。
 
WHRoeder:
你的附件
11/13/2013 03:25 PM 37,911 Ind_error_tester.mq4
11/13/2013 03:25 PM 37,911 Ind_error_tester_Neutralized.mq4
两个文件都是一样的。

是的,对不起。我又附上了。
附加的文件:
 
在MT4中,我们要做的是编码员或错误收集者。
 
RaptorUK:
. .为什么你的函数类型是int
很遗憾你没有回答这个问题 ......让函数 变成void ,因为它不需要返回任何东西,删除return(0)重新编译,会发生什么?
 
显然,它不能处理那么大的一个函数
//+-------------------------------------------
//| Custom indicator initialization function  
//+-------------------------------------------
 int init()
  {
//---- indicators

int Column1x=10,Column2x=300,Column3x=590,
    Column1xp=70,Column2xp=360,Column3xp=650,
    Column1xg=130,Column2xg=420,Column3xg=710,
    Column1xa=250,Column2xa=540,Column3xa=830;

//---------------USD--------------------------
   //---- EURUSD-------------------
   ObjectCreate("EURUSD", OBJ_LABEL, 0, 0, 0);
 :
   ObjectSet("EURGBP2", OBJPROP_YDISTANCE, ZoomTimes*60);



   ObjectCreate("EURGBP2c", OBJ_LABEL, 0, 0, 0);
:
//+------------------------------------------------------
//| Custom indicator initialization function             
//+------------------------------------------------------
int Column1x=10,Column2x=300,Column3x=590,
    Column1xp=70,Column2xp=360,Column3xp=650,
    Column1xg=130,Column2xg=420,Column3xg=710,
    Column1xa=250,Column2xa=540,Column3xa=830;
int init(){ init1(); init2(); }
int init1()
  {
//---- indicators

//---------------USD------------------------------------
   //---- EURUSD-------------------
   ObjectCreate("EURUSD", OBJ_LABEL, 0, 0, 0);
:
   ObjectSet("EURGBP2", OBJPROP_YDISTANCE, ZoomTimes*60);
}
int init2()
  {
   ObjectCreate("EURGBP2c", OBJ_LABEL, 0, 0, 0);
:
 
RaptorUK:
可惜你没有回答这个问题 ......把这个函数设为void ,因为它不需要返回任何东西,去掉return(0) 重新编译,会发生什么?


是的,这也可以解决这个问题。但是,为什么?我的意思是,如果我们说这个函数 是一个int,我们需要这个值。为什么改变对象的一部分就能解决这个问题,无论函数是否为int。甚至start、init和deinit都是int,而且它们返回(0),所以这不是问题所在。
 
WHRoeder:
显然,它不能处理那么大的一个函数。


whroeder知道我在说什么。
 
tonny:

是的,这也是对它的整理。但是,为什么呢?我的意思是,如果我们说这个函数是一个int,我们需要这个值。为什么改变对象的一部分就能解决这个问题,无论函数是否是int。即使start、init和deinit都是int,而且它们返回(0),所以这不是问题。
return(0)返回的是一个int,int是零......一个void不会返回一个值,如果你想从一个void函数 中返回,你可以使用return。
 
tonny:

whroeder明白我在说什么。
但它可以处理那么大的函数......正如我所解释的,改变函数类型,同样大小的函数就不会出现编译错误。