错误、漏洞、问题 - 页 216 1...209210211212213214215216217218219220221222223...3184 新评论 Alexey Da 2010.12.02 10:18 #2151 Vigor:我遇到了一个调用堆栈溢出的问题(我是这么认为的)。 在调用其中一个对象的方法后,见下面的例子。代码被简化了,只是大意。类CClass1是一个基类,list1有不同的对象,它们是这个类的后代,它们的init函数的实现方式也不同。因此,在一个类中,init函数在从init返回后的一行中获取了这样一个列表(简单地说,它初始化了一个嵌套接口,即面板中的一个面板)。 有一个错误 2010.12.02 00:21:00 test1 (EURUSD,H1) 'Container.mqh'中无效的指针访问 (74,10)也就是说,指针t已经死亡。在调试时,没有这样的错误,在方法调用后,指针是 "活的",嵌套接口被创建,专家顾问进一步工作。这是绕过错误的唯一方法。#property stacksize pointer没有取得任何成果。 很难说什么是肯定的。你需要源代码。尝试给servicedesk 写一份请求。 Общайтесь с разработчиками через Сервисдеск! www.mql5.com Ваше сообщение сразу станет доступно нашим отделам тестирования, технической поддержки и разработчикам торговой платформы. Aleksandr Chugunov 2010.12.02 13:57 #2152 我放假回来,启动终端,更新到360构建,有一个指标停止工作......我读到了这些变化:6.MQL5:固定处理图表上的点击事件。现在,当你点击一个图形对象时,会同时产生两个事件:CHARTEVENT_OBJECT_CLICK+ CHARTEVENT_CLICK,而以前只有一个CHARTEVENT_OBJECT_CLICK,这可以模拟双击。会一直这样吗,还是说这是个错误? Документация по MQL5: Стандартные константы, перечисления и структуры / Константы графиков / Типы событий графика www.mql5.com Стандартные константы, перечисления и структуры / Константы графиков / Типы событий графика - Документация по MQL5 Alexey Da 2010.12.02 14:27 #2153 AlexSTAL: 放假回来,启动终端,更新到360版本,有一个指标停止工作......。在变化中阅读。 6.MQL5: 修正了图表上点击事件的处理。现在,当你点击一个图形对象时,会同时产生两个事件:CHARTEVENT_OBJECT_CLICK+ CHARTEVENT_CLICK,而以前只有一个CHARTEVENT_OBJECT_CLICK,这可以模拟双击。会一直这样吗,还是说这是个错误? 这是有意为之的。 Mykola Demko 2010.12.02 14:35 #2154 我又一次撞上了不可能的墙。我需要向构造函数传递一个参数,这样类就会被初始化为某些参数。我怎样才能解决这个问题? 你有什么建议? Aleksey Sergan 2010.12.02 14:54 #2155 Urain:我又一次撞上了不可能的墙。我需要向构造函数传递一个参数,以便用某些参数对类进行初始化。我怎样才能解决这个问题呢? к 好吧,我看不出有什么其他的出路。 class test{ private: bool inited; int value; public: void test(){ inited = false; } bool Set( int passed ){ value = passed; return(true); } bool Init( int passed ){ if ( Set( passed ) ){ inited = true; return(true); } return(false); } int Get( ){ if( !inited ){ Print("Объект неинициализирован"); return(-1); } return(value); } }; void OnStart() { test var; if( !var.Init(1)){ Print("Ошибка инициализации объекта"); return; } Print(var.Get()); test var2; Print( var2.Get() ); } 当然,在继承类的情况下,你必须把Inits放在正确的顺序上 我希望他们能写一篇关于复杂项目中错误处理的文章,打印 和返回,因为这里不是解决方案。 Mykola Demko 2010.12.02 15:12 #2156 gdtt: 好吧,我没有看到任何其他的出路。 当然,在继承类的情况下,你需要把Inits放在正确的顺序上 一般来说,我希望他们写一篇关于复杂项目中错误处理的文章,打印和返回,因为这里不是解决方案。也就是说,要创建一个能够完成构造过程的预构造器,而这个预构造器又会显示一个初始化标志。总的来说,这是一个很好的解决方案,但它有一些不便之处。我们必须用初始化标志来轮询每个函数,而对于大量的类函数,这并不方便。如果我们要改变什么,所有的功能都要重写。SZ 我已经编辑了代码,修正了错别字。class test { private: bool inited; int value; public: test(void){inited=false;}; bool Set(int passed){value=passed;return(true);}; bool Init(int passed) { if(Set(passed))inited=true; return(inited); }; int Get() { if(!inited) { Print("Объект неинициализирован"); return(-1); } return(value); }; }; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void OnStart() { test var; var.Init(1); Print(var.Get()); test var2; Print(var2.Get()); } Aleksey Sergan 2010.12.02 15:21 #2157 Urain: 即创建一个预构造器来完成构造过程,并反过来设置一个初始化标志。 一般来说,它很酷,但也有一些不便之处。我们将不得不查询每个函数的初始化标志,而对于大量的类函数,这并不方便。 第一次的代码已经以与第二次相同的方式进行了更新。 SZ 我已经编辑了代码,修正了这个疏忽。 好吧,如果有一个构造函数,这并不意味着初始化成功了。无论如何,你需要验证初始化的事实 当然,你可以检查一次。void OnStart() { test var; if( ! var.Init(1)){ // здесь какято обрабтка return; }; Print(var.Get()); test var2; Print(var2.Get()); } 但如果你使用自己的代码,你可以规定在调用时检查初始化的事实,如果它将被其他人使用,你不能在指令中写:"你必须只使用这种结构,否则我不能保证后果"。不,反正你必须在类方法 中检查初始化。 [删除] 2010.12.02 17:52 #2158 对开发商而言。在重新启动新的构建后,立即PS更新安装在不同文件夹中的终端是成功的,符号在列表中(但更新前没有打开的图表)... Sergey Gritsay 2010.12.02 19:09 #2159 告诉我这是一个错误,还是不允许这样做。ENUM_ORDER_TYPE Signal[21]; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- ArrayInitialize(Signal,WRONG_VALUE); //--- return(0); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- } //+------------------------------------------------------------------+它给出了一个错误'ArrayInitialize' - no one of the overloads can be applied to the function call [删除] 2010.12.02 20:37 #2160 sergey1294:请告诉我这是否是一个错误或不允许。你会得到一个错误最有可能的是,ArrayInitialize()的目的是只填充某种类型的数组,确切地说,是数字的(最可能是int或double)。因为数组的类型是ENUM_ORDER_TYPE,调用ArrayInitialize会导致一个错误,说这个方法的调用是不允许的。在我看来,在这种情况下有两种选择。1. 将数组类型ENUM_ORDER_TYPE 改为int,同时在代码中考虑到它(至少订单类型可以很容易地表示为int)。2.独立地实现阵列的 "初始化"。 Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров www.mql5.com Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров - Документация по MQL5 1...209210211212213214215216217218219220221222223...3184 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
我遇到了一个调用堆栈溢出的问题(我是这么认为的)。
在调用其中一个对象的方法后,见下面的例子。代码被简化了,只是大意。类CClass1是一个基类,list1有不同的对象,它们是这个类的后代,它们的init函数的实现方式也不同。因此,在一个类中,init函数在从init返回后的一行中获取了这样一个列表(简单地说,它初始化了一个嵌套接口,即面板中的一个面板)。
有一个错误
2010.12.02 00:21:00 test1 (EURUSD,H1) 'Container.mqh'中无效的指针访问 (74,10)
也就是说,指针t已经死亡。
在调试时,没有这样的错误,在方法调用后,指针是 "活的",嵌套接口被创建,专家顾问进一步工作。
这是绕过错误的唯一方法。
#property stacksize pointer没有取得任何成果。很难说什么是肯定的。你需要源代码。
尝试给servicedesk 写一份请求。
我放假回来,启动终端,更新到360构建,有一个指标停止工作......
我读到了这些变化:6.MQL5:固定处理图表上的点击事件。
现在,当你点击一个图形对象时,会同时产生两个事件:CHARTEVENT_OBJECT_CLICK+ CHARTEVENT_CLICK,而以前只有一个CHARTEVENT_OBJECT_CLICK,这可以模拟双击。
会一直这样吗,还是说这是个错误?
放假回来,启动终端,更新到360版本,有一个指标停止工作......。
在变化中阅读。 6.MQL5: 修正了图表上点击事件的处理。
现在,当你点击一个图形对象时,会同时产生两个事件:CHARTEVENT_OBJECT_CLICK+ CHARTEVENT_CLICK,而以前只有一个CHARTEVENT_OBJECT_CLICK,这可以模拟双击。
会一直这样吗,还是说这是个错误?
我又一次撞上了不可能的墙。
我需要向构造函数传递一个参数,这样类就会被初始化为某些参数。
我怎样才能解决这个问题? 你有什么建议?
我又一次撞上了不可能的墙。
我需要向构造函数传递一个参数,以便用某些参数对类进行初始化。
我怎样才能解决这个问题呢?
к
好吧,我看不出有什么其他的出路。
当然,在继承类的情况下,你必须把Inits放在正确的顺序上
我希望他们能写一篇关于复杂项目中错误处理的文章,打印 和返回,因为这里不是解决方案。
好吧,我没有看到任何其他的出路。
当然,在继承类的情况下,你需要把Inits放在正确的顺序上
一般来说,我希望他们写一篇关于复杂项目中错误处理的文章,打印和返回,因为这里不是解决方案。
也就是说,要创建一个能够完成构造过程的预构造器,而这个预构造器又会显示一个初始化标志。
总的来说,这是一个很好的解决方案,但它有一些不便之处。我们必须用初始化标志来轮询每个函数,而对于大量的类函数,这并不方便。
如果我们要改变什么,所有的功能都要重写。
SZ 我已经编辑了代码,修正了错别字。
即创建一个预构造器来完成构造过程,并反过来设置一个初始化标志。
一般来说,它很酷,但也有一些不便之处。我们将不得不查询每个函数的初始化标志,而对于大量的类函数,这并不方便。
第一次的代码已经以与第二次相同的方式进行了更新。
SZ 我已经编辑了代码,修正了这个疏忽。
好吧,如果有一个构造函数,这并不意味着初始化成功了。无论如何,你需要验证初始化的事实
当然,你可以检查一次。
但如果你使用自己的代码,你可以规定在调用时检查初始化的事实,如果它将被其他人使用,你不能在指令中写:"你必须只使用这种结构,否则我不能保证后果"。不,反正你必须在类方法 中检查初始化。
对开发商而言。
在重新启动新的构建后,立即
PS
更新安装在不同文件夹中的终端是成功的,符号在列表中(但更新前没有打开的图表)...
告诉我这是一个错误,还是不允许这样做。
它给出了一个错误
请告诉我这是否是一个错误或不允许。
你会得到一个错误
最有可能的是,ArrayInitialize()的目的是只填充某种类型的数组,确切地说,是数字的(最可能是int或double)。
因为数组的类型是ENUM_ORDER_TYPE,调用ArrayInitialize会导致一个错误,说这个方法的调用是不允许的。
在我看来,在这种情况下有两种选择。
1. 将数组类型ENUM_ORDER_TYPE 改为int,同时在代码中考虑到它(至少订单类型可以很容易地表示为int)。
2.独立地实现阵列的 "初始化"。