错误、漏洞、问题 - 页 1356 1...134913501351135213531354135513561357135813591360136113621363...3184 新评论 A100 2015.08.24 22:54 #13551 Vasiliy Sokolov: 非常酷,最重要的是意识形态上的正确。两只手赞成! 那么它在意识形态上就会是正确的class A { public: bool operator !=( A* ) {} bool operator <( A* ) {} }; void f() { A *a1, *a2; a1 != a2; //здесь простое сравнение указателей вместо вызова operator !=() a1 < a2; //здесь вызывается operator <() } operator!=()将被调用,而不是像现在这样比较指针是否相等。而指针的比较可以由一个类似于::GetPointer(...)的特殊函数来完成。但这是不可能的,原因很简单,它将带来极大的不便,而好处只是意识形态上的正确性 A100 2015.08.25 00:21 #13552 有一段时间没有收到更新了:MetaTrader5 build 1159(连接到MetaQuotes-Demo)。命令编译器加载构建1162 Alexey Volchanskiy 2015.08.25 01:10 #13553 Vasiliy Sokolov:那么字符串也是一组特定的数字。而一张照片也是一个数字和芯片上的一个电脉冲...一般来说,学习电气工程,同事。下面是C++中的指针和MQL/C#以及其他一些语言中的描述符的比较。挑战--你想和一个伙伴现场聊天。1.指点迷津。我们知道街道、门牌号和单位。我们去了地址,叫醒了那个朋友,得到了一个泡沫,他很兴奋,在聊天))。2.描述符。我们不知道确切的地址,没有人被允许进入这个房子,例如,它是联邦安全局的大楼。房子里有一个检查站,它拒绝按朋友的名字说地址(按描述符),拒绝让进房子(在地址空间)。保安打电话给那个伙计,请他出来。他出来了,你兴高采烈地掏出泡沫,他嘶吼道:"你是什么人!!!!,马上把它收起来!!走了这么多......走在回家的路上,手里拿着一个未开封的瓶子,你猛然意识到,描述词提供了安全感,以换取指示牌的能力。 A100 2015.08.25 01:44 #13554 Vasiliy Sokolov:一般来说,学习电气工程,同事。 没有其他争论吗? Vasiliy Sokolov 2015.08.25 10:07 #13555 A100: 没有其他争论吗? 你呢? Ilyas 2015.08.25 11:42 #13556 A100: 我有一些代码片段,其中指针被明确地转换为数字(用于与外部写/读系统的接口,以及错误分析和调试),如果这被禁止,那么灵活性将被降低,我们将不得不重做。 有趣的论点,需要一些时间来思考。请创建一个请求,我们将详细讨论它。 Alexey Navoykov 2015.08.25 13:33 #13557 顺便说一下,如何在MQL中引入* 和& 操作符,以便在第一种情况下允许显式访问对象,在第二种情况下获取对象 指针(而不是繁琐的GetPointer)。 星号是必须的,而且语言中没有任何东西可以取代它。没有它,就不可能控制像上面A100所描述的情况,当代替对象本身的一些指针动作被执行时。 就个人而言,这是一个持续的问题,我必须时刻保持警惕,或者到处指定A.operator=(B),A.operator!=(B),即失去了简洁性,重载操作符实际上变得毫无意义。我曾经提出过这个问题,但这个话题被搁置了。 让我们最后完成这个问题。 Alexey Volchanskiy 2015.08.25 14:10 #13558 关于外部变量的问题。我面临的情况是,在程序执行 过程中,外部变量发生了变化,但当时间框架发生变化时,它又采用了属性窗口中设置的值。例如,如果在开始之前,我将TradeEnable设置为EnableAll,并在程序执行期间将该值改为EnableBuy,那么当图表变为另一个时间框架时,该值将恢复为EnableAll。我在定时器事件中定义的值并通过Comment输出,不可能有错误。enum ETradeEnable {EnableAll, EnableBuy, EnableSell, DisableAll}; extern ETradeEnable TradeEnable = EnableAll;TradeEnable变量不受图表翻转的影响。阅读手册 -与输入变量不同,外部变量的值可以在程序运行时以编程方式改变。 这就是OnDeinit和OnInit的设置方式。 问题:我不明白的地方 或者改变TradeEnable是一个运行时错误?int LastDeinitReason = 0; void OnDeinit(const int reason) { LastDeinitReason = reason; if(reason==REASON_CHARTCHANGE || reason==REASON_TEMPLATE || reason==REASON_PARAMETERS) return; EventKillTimer(); // далее код при завершении работы советника } int OnInit() { if(LastDeinitReason==REASON_CHARTCHANGE || LastDeinitReason==REASON_TEMPLATE) { LastDeinitReason = 0; return(INIT_SUCCEEDED); } if(LastDeinitReason==REASON_PARAMETERS) { SetParams(); return(INIT_SUCCEEDED); } // далее код инициализации при запуске } A100 2015.08.25 14:11 #13559 Alexey Navoykov:让我们最后完成这个问题。这里牺牲了两个运算符(==和!=),以保留所有其他运算符。我在一个模式中看到了一条出路。template<typename T1, typename T2> bool IsEqualPointer( const T1 *t1, const T2 *t2 ) { return ( ulong(t1) == ulong(t2) ); }如果定义了operator==(!=),它将被调用。如果它没有被定义,指针将被比较为相等。而如果定义了operator==(!=),并且指针必须在相等的情况下相互比较,这可以通过指定的模板完成。对现有系统的改变是最小的,最主要的是它们不会影响那些简单地将指针进行等价比较而不使用operator==(!=)重载的用户。 Alexey Navoykov 2015.08.25 14:24 #13560 A100:这里牺牲了两个运算符(==和!=),以保留所有其他运算符。我在一个模式中看到了一条出路。如果定义了operator==(!=),它将被调用。如果它没有被定义,指针将被比较为相等。而如果定义了operator==(!=),并且有必要对指针进行平等的比较,这可以通过指定的模板来完成。现有系统的变化是最小的,最主要的是它们不会影响那些简单地比较指针而没有operator==(!=)重载的用户。当然,你可以通过单独的函数进行比较和赋值,但有什么意义呢?关键是要说服开发商做出一个适当的解决方案。 1...134913501351135213531354135513561357135813591360136113621363...3184 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
非常酷,最重要的是意识形态上的正确。两只手赞成!
但这是不可能的,原因很简单,它将带来极大的不便,而好处只是意识形态上的正确性
那么字符串也是一组特定的数字。而一张照片也是一个数字和芯片上的一个电脉冲...
一般来说,学习电气工程,同事。
下面是C++中的指针和MQL/C#以及其他一些语言中的描述符的比较。
挑战--你想和一个伙伴现场聊天。
1.指点迷津。我们知道街道、门牌号和单位。我们去了地址,叫醒了那个朋友,得到了一个泡沫,他很兴奋,在聊天))。
2.描述符。我们不知道确切的地址,没有人被允许进入这个房子,例如,它是联邦安全局的大楼。房子里有一个检查站,它拒绝按朋友的名字说地址(按描述符),拒绝让进房子(在地址空间)。保安打电话给那个伙计,请他出来。他出来了,你兴高采烈地掏出泡沫,他嘶吼道:"你是什么人!!!!,马上把它收起来!!走了这么多......走在回家的路上,手里拿着一个未开封的瓶子,你猛然意识到,描述词提供了安全感,以换取指示牌的能力。
一般来说,学习电气工程,同事。
没有其他争论吗?
我有一些代码片段,其中指针被明确地转换为数字(用于与外部写/读系统的接口,以及错误分析和调试),如果这被禁止,那么灵活性将被降低,我们将不得不重做。
顺便说一下,如何在MQL中引入* 和& 操作符,以便在第一种情况下允许显式访问对象,在第二种情况下获取对象 指针(而不是繁琐的GetPointer)。 星号是必须的,而且语言中没有任何东西可以取代它。没有它,就不可能控制像上面A100所描述的情况,当代替对象本身的一些指针动作被执行时。 就个人而言,这是一个持续的问题,我必须时刻保持警惕,或者到处指定A.operator=(B),A.operator!=(B),即失去了简洁性,重载操作符实际上变得毫无意义。
我曾经提出过这个问题,但这个话题被搁置了。 让我们最后完成这个问题。
关于外部变量的问题。
我面临的情况是,在程序执行 过程中,外部变量发生了变化,但当时间框架发生变化时,它又采用了属性窗口中设置的值。例如,如果在开始之前,我将TradeEnable设置为EnableAll,并在程序执行期间将该值改为EnableBuy,那么当图表变为另一个时间框架时,该值将恢复为EnableAll。我在定时器事件中定义的值并通过Comment输出,不可能有错误。
TradeEnable变量不受图表翻转的影响。阅读手册 -与输入变量不同,外部变量的值可以在程序运行时以编程方式改变。
这就是OnDeinit和OnInit的设置方式。
问题:我不明白的地方 或者改变TradeEnable是一个运行时错误?
让我们最后完成这个问题。
这里牺牲了两个运算符(==和!=),以保留所有其他运算符。
我在一个模式中看到了一条出路。
如果定义了operator==(!=),它将被调用。如果它没有被定义,指针将被比较为相等。而如果定义了operator==(!=),并且指针必须在相等的情况下相互比较,这可以通过指定的模板完成。
对现有系统的改变是最小的,最主要的是它们不会影响那些简单地将指针进行等价比较而不使用operator==(!=)重载的用户。
这里牺牲了两个运算符(==和!=),以保留所有其他运算符。
我在一个模式中看到了一条出路。
如果定义了operator==(!=),它将被调用。如果它没有被定义,指针将被比较为相等。而如果定义了operator==(!=),并且有必要对指针进行平等的比较,这可以通过指定的模板来完成。
现有系统的变化是最小的,最主要的是它们不会影响那些简单地比较指针而没有operator==(!=)重载的用户。
当然,你可以通过单独的函数进行比较和赋值,但有什么意义呢?关键是要说服开发商做出一个适当的解决方案。