错误、漏洞、问题 - 页 1182 1...117511761177117811791180118111821183118411851186118711881189...3184 新评论 Stanislav Korotky 2014.08.05 20:29 #11811 Zeleniy:优化是没有用的。2014.08.05 19:34:42 测试仪没有选择优化参数,请检查要优化的输入,并仔细设置开始、步骤和停止值。翻译没有给出任何东西。 你说 "没有什么 "是什么意思?翻译应该给你一些东西,比如你必须至少选择一个参数进行优化,并确保开始、结束和步骤值是正确的。 Aleksey Rodionov 2014.08.05 20:35 #11812 marketeer: 你是什么意思,"没有什么"?翻译应该给我一些东西,比如说我应该至少选择一个参数进行优化,并确保测试的开始、结束和步骤是正确的。 太奇怪了,我什么都不明白,也许我只是累了,第二天我还在纠结于错误。谢谢你,我将依靠你的话。 Alexey Navoykov 2014.08.06 02:39 #11813 我面临这样的问题:我需要将两个同一类的对象相互比较,为了方便,我决定重载运算符==。 结果发现,如果对象是动态的,我的运算符就不会被执行,而不是对象本身的指针被比较。嗯,这在原则上是有道理的,通过指针跳转到对象的操作是需要的:*a == *b。我们必须补充。class T { int x; public: T (int value) { x=value; } bool operator==(T& other) { Print("compare1"); return x==other.x; } bool operator==(T* other) { Print("compare2"); return x==other.x; } }; //------------------ void OnStart() { T* a= new T(10); T* b= new T(10); Alert(a==b); delete a; delete b; } Alexey Navoykov 2014.08.06 03:27 #11814 虽然我刚刚想到,考虑到语言的特殊性,我们在比较指针而不是对象,这从根本上是错误的。 毕竟,MQL是一种托管语言,"对象 "这个概念在这里被使用,不管对象是如何存储的,如何被访问。成员和方法在任何情况下都可以通过点来访问。相应地,比较运算符对静态选择的对象和动态对象都应该以同样的方式工作。 如果你需要比较指针,你应该使用GetPointer() 来做。 A100 2014.08.06 14:36 #11815 meat:虽然我只是在想,鉴于语言的特殊性,存在指针而不是对象本身的比较这一事实从根本上是错误的。 没有必要在MQL中发明与C++相抵触的比较规则,只要你能通过其他方式做到这一点。如果你有指针,你需要比较对象--使用比较函数。bool Compare(const T& t1, const T& t2 ) { return ( t1 == t2 ); } Alert( Compare( a, b )); 允许一个形式的记录(*a == *b)是一回事,给记录赋予不同的意义(a == b)是另一回事。 Aleksey Rodionov 2014.08.06 15:11 #11816 在测试专家顾问 时,它产生了一个错误为OrderSend函数提供了无效的外差。OrderSend错误4107我怎样才能在不进入代码的情况下修复它? Alexey Navoykov 2014.08.06 17:00 #11817 A100: 在MQL中没有必要发明与C++相矛盾的比较规则,只要可以使用其他手段就可以了。如果你有指针,并且你需要比较对象,请使用比较函数 建议允许一个(*a == *b)类型的条目是一回事,而给(a == b)条目赋予不同的含义是另一回事好吧,我在解释MQL的规则与C++的规则相矛盾。 在这里用指针指代一个对象是用点来完成的,而如果我们遵循C++的规则,应该用->来完成。也就是说,"指针 "和 "对象 "在C++中是两个完全不同的概念,这就是为什么语法不同的原因。 一切都是严格的。 但是在这里,一切都混在了一起。 看起来就像我们在处理一个指针的属性和方法。我并不是说这不好,这对OOP来说更方便,例如C#中就是这样做的。 但这样一来,其他所有的东西都必须以同样的方式实现。 必须有一个单一的概念。 否则就会出现矛盾和混乱:在某些情况下,我们使用指针的方式与对象本身相同,而在其他情况下,指针突然出现了。在实际操作方面,我已经遇到了一个问题:我的代码使用的是静态对象。 然后我决定用动态对象取代其中的一些对象。 结果,比较和赋值操作开始变得非常不同。而这个问题很难被发现,因为程序继续编译并正常工作,但不是以它应该的方式。 Alexey Navoykov 2014.08.06 17:27 #11818 我的代码中有些类包含一些对象。CClass { ... CObj Object; ... };CObj类是在它之前声明的。当试图编译时,我得到了以下错误:'Object' - 不能取消设置这个错误是什么意思,其原因是什么? 我不记得以前遇到过这个错误。 CObj类有一个构造函数和解构函数。我试着把Object简单地声明为一个变量--一切正常。 但当它是一个类的一部分时,它不会这样做。 Alexey Navoykov 2014.08.07 13:44 #11819 那么,谁能解释一下这个错误("-不能取消设置")是什么? 它什么时候发生? Ilyas 2014.08.07 14:55 #11820 meat: 那么,谁能解释一下这个错误("-不能取消设置")是什么? 它什么时候发生?ZeroMemory函数 不能用于此对象。 1...117511761177117811791180118111821183118411851186118711881189...3184 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
优化是没有用的。
2014.08.05 19:34:42 测试仪没有选择优化参数,请检查要优化的输入,并仔细设置开始、步骤和停止值。
翻译没有给出任何东西。
你是什么意思,"没有什么"?翻译应该给我一些东西,比如说我应该至少选择一个参数进行优化,并确保测试的开始、结束和步骤是正确的。
我面临这样的问题:我需要将两个同一类的对象相互比较,为了方便,我决定重载运算符==。 结果发现,如果对象是动态的,我的运算符就不会被执行,而不是对象本身的指针被比较。嗯,这在原则上是有道理的,通过指针跳转到对象的操作是需要的:*a == *b。我们必须补充。
虽然我刚刚想到,考虑到语言的特殊性,我们在比较指针而不是对象,这从根本上是错误的。 毕竟,MQL是一种托管语言,"对象 "这个概念在这里被使用,不管对象是如何存储的,如何被访问。成员和方法在任何情况下都可以通过点来访问。相应地,比较运算符对静态选择的对象和动态对象都应该以同样的方式工作。 如果你需要比较指针,你应该使用GetPointer() 来做。
虽然我只是在想,鉴于语言的特殊性,存在指针而不是对象本身的比较这一事实从根本上是错误的。
在测试专家顾问 时,它产生了一个错误
为OrderSend函数提供了无效的外差。
OrderSend错误4107
我怎样才能在不进入代码的情况下修复它?
在MQL中没有必要发明与C++相矛盾的比较规则,只要可以使用其他手段就可以了。如果你有指针,并且你需要比较对象,请使用比较函数 建议允许一个(*a == *b)类型的条目是一回事,而给(a == b)条目赋予不同的含义是另一回事
好吧,我在解释MQL的规则与C++的规则相矛盾。 在这里用指针指代一个对象是用点来完成的,而如果我们遵循C++的规则,应该用->来完成。
也就是说,"指针 "和 "对象 "在C++中是两个完全不同的概念,这就是为什么语法不同的原因。 一切都是严格的。 但是在这里,一切都混在了一起。 看起来就像我们在处理一个指针的属性和方法。我并不是说这不好,这对OOP来说更方便,例如C#中就是这样做的。 但这样一来,其他所有的东西都必须以同样的方式实现。 必须有一个单一的概念。 否则就会出现矛盾和混乱:在某些情况下,我们使用指针的方式与对象本身相同,而在其他情况下,指针突然出现了。
在实际操作方面,我已经遇到了一个问题:我的代码使用的是静态对象。 然后我决定用动态对象取代其中的一些对象。 结果,比较和赋值操作开始变得非常不同。而这个问题很难被发现,因为程序继续编译并正常工作,但不是以它应该的方式。
我的代码中有些类包含一些对象。
CClass { ... CObj Object; ... };CObj类是在它之前声明的。
当试图编译时,我得到了以下错误:'Object' - 不能取消设置
这个错误是什么意思,其原因是什么? 我不记得以前遇到过这个错误。 CObj类有一个构造函数和解构函数。
我试着把Object简单地声明为一个变量--一切正常。 但当它是一个类的一部分时,它不会这样做。
那么,谁能解释一下这个错误("-不能取消设置")是什么? 它什么时候发生?