错误、漏洞、问题 - 页 713 1...706707708709710711712713714715716717718719720...3184 新评论 Vladimir Gomonov 2012.04.11 22:05 #7121 speedy:编译按钮永远消失了(你必须重新加载编辑器才能找回来)。嗯,不完全是...:) 我设法把它弄回来了 :)你必须注释掉递归部分,然后按下调试编译按钮来做。 Vladimir Gomonov 2012.04.11 22:31 #7122 speedy: 1. 将内部的非基类元素 "暴露 "在外面是不安全的(在这个例子中,不是属性本身,而只是一个数组元素!)此外,不可能改变其值。此外,它与面向对象编程的 "精神 "相抵触:所有与对象的数据有关的工作都应该在对象内部进行,由它自己的方法来完成...。3.只使用Setter来处理数据属性如何?4.代码将从可读性中受益。 5.最终,这种带有l值索引器的 "简单性 "将使包括你在内的任何人都无法理解这段代码的工作原理......6.你会花更多的时间去寻找错误,而不是写Setter。那是什么,黑色幽默? 1.对不起,--无稽之谈。 我知道偏执狂在这里很流行,是 "为什么你不应该那样做 "的废柴论据。 我不认为有任何危险。仔细看了一下,如果有的话。 任何名字,毕竟是一个参考。 索引只是名字概念的一个延伸。仅此而已,为了安全起见,让我们完全禁止命名。 链接是非常危险的,不是吗?2.这种逻辑与C++、C#、Delphi和几十种不太流行的语言的面向对象的编程精神发生了激烈的矛盾,在这些语言中,索引器在右边和左边都工作得相当好。 此外,由于某些原因,它并不与常识和我的精神相矛盾。索引器是为了与外部环境进行交流。 它们的功能正是接口的功能。 我可以封装和隐藏任何东西,但我需要索引来操作对象的数组。事实上,所有数组都是以某种方式排列的。例如,常规的动态mql数组。让我们用SetArrayValue(array, i, j, value)这样的函数来代替它们;这将同时提高可读性。而调试也将变得更加容易。呃... 3.做一个普通的索引器怎么样? 女仆当然很酷,但女王还是更好。4.这是我真正开始失去理智的地方。 这是不可以读的吗? t[i]=i*i; 这更具有可读性,不是吗? t.setDataElement(i, i*i);酷,我想我要去接受治疗了。5.酷。6.我哭了。 Pavel Tsatsenko 2012.04.12 01:56 #7123 该指标在构建630时停止编译。int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { //код for(int i=limit; i<rates_total && !IsStopped(); i++) { if() { //~400 стр. кода // i используется много раз // тут же определяется RT=true или false } if(RT) { double p=close[i]; // 'i' - undeclared identifier } } return(rates_total); // 'rates_total' - undeclared identifier }ci 错误可以通过在for的 前面加一个广告来消除。int i; for(i=limit; i<rates_total && !IsStopped(); i++) { }如何处理'rate_total'--未声明的标识符? 在Win7 x64和XP x32上也一样。 Victor 2012.04.12 04:46 #7124 你能告诉我吗?MathMin()和MathMax()是作为函数(通过堆栈传递参数)还是作为宏替换(内联)实现的?根据参考书,它们的功能 是。 Документация по MQL5: Основы языка / Функции / Передача параметров www.mql5.com Основы языка / Функции / Передача параметров - Документация по MQL5 Rashid Umarov 2012.04.12 05:13 #7125 kPVT:该指标在构建630时停止编译。ci 错误可以通过在for的 前面加一个广告来消除。如何处理'rate_total'--未声明的标识符? 在Win7 x64和XP x32上也一样。 你的代码中某处一定有错误。如果你声明了变量limit、RT和条件if(),那么你提交的程序块在编译时不会出现错误。 Pavel Tsatsenko 2012.04.12 06:07 #7126 Rosh: 你的代码中的某个地方显然有错误。如果你声明了变量limit、RT并设置了条件if(),那么提交的程序块在编译时不会出现错误。自然,我没有给出代码,但有一个大致的结构。在619版本中,该指标编译后工作正常。630时,它产生了上述错误。代码是100%不变的。编译器的工作方式显然已经改变。 Rashid Umarov 2012.04.12 06:23 #7127 请写信给服务台 并附上源代码。这将有助于开发人员找到原因并加以修复。 Ilyas 2012.04.12 06:45 #7128 speedy:错误?下面的代码在编译器中产生了一种永久的循环。点击取消不会立即起作用,但当它起作用时,就会重新获得对编辑器的控制。取消按钮本身并没有消失,但它也无法访问。编译按钮永远消失了(你必须重新加载编辑器才能找回来)。 谢谢你的帖子,编译器错误已被修复。 [删除] 2012.04.12 07:04 #7129 victorg:请告知。MathMin()和MathMax()是作为函数(通过堆栈传递参数)还是作为宏置换(内联)实现的?根据参考书,它们是功能。当然是函数,因为在编译的时候,参数的值是未知的。IMHO内联和宏是不同的。P.S: 内联或不内联,我不能说。 Victor 2012.04.12 07:41 #7130 220Volt:当然是函数,因为在编译的时候,参数的值是未知的。IMHO内联和宏是不同的。P.S:他们是否是内联的,我不能说。 宏和内联函数确实是不同的东西。但这不是我的意思。下面是一个例子,在编译的时候,参数的值是未知的#define min(a,b) (((a)<(b))?(a):(b)) double func(a,b) { c=min(a,b); // 1-й вариант c=fmin(a,b); // 2-й вариант return(c); } 在第一种情况下,代码必须粘贴到当前函数中(我猜),在第二种情况下,函数被调用,参数 通过堆栈传递(我猜)。但出于优化的目的,编译器实际上也可以通过替换来实现第二个变体。是这样吗? 我不知道。这就是为什么我问。 Документация по MQL5: Основы языка / Функции / Передача параметров www.mql5.com Основы языка / Функции / Передача параметров - Документация по MQL5 1...706707708709710711712713714715716717718719720...3184 新评论 原因: 取消 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
编译按钮永远消失了(你必须重新加载编辑器才能找回来)。
嗯,不完全是...:) 我设法把它弄回来了 :)
你必须注释掉递归部分,然后按下调试编译按钮来做。
1. 将内部的非基类元素 "暴露 "在外面是不安全的(在这个例子中,不是属性本身,而只是一个数组元素!)此外,不可能改变其值。
此外,它与面向对象编程的 "精神 "相抵触:所有与对象的数据有关的工作都应该在对象内部进行,由它自己的方法来完成...。
3.只使用Setter来处理数据属性如何?
4.代码将从可读性中受益。
5.最终,这种带有l值索引器的 "简单性 "将使包括你在内的任何人都无法理解这段代码的工作原理......
6.你会花更多的时间去寻找错误,而不是写Setter。
那是什么,黑色幽默?
1.对不起,--无稽之谈。 我知道偏执狂在这里很流行,是 "为什么你不应该那样做 "的废柴论据。 我不认为有任何危险。仔细看了一下,如果有的话。 任何名字,毕竟是一个参考。 索引只是名字概念的一个延伸。仅此而已,为了安全起见,让我们完全禁止命名。 链接是非常危险的,不是吗?
2.这种逻辑与C++、C#、Delphi和几十种不太流行的语言的面向对象的编程精神发生了激烈的矛盾,在这些语言中,索引器在右边和左边都工作得相当好。 此外,由于某些原因,它并不与常识和我的精神相矛盾。
索引器是为了与外部环境进行交流。 它们的功能正是接口的功能。 我可以封装和隐藏任何东西,但我需要索引来操作对象的数组。事实上,所有数组都是以某种方式排列的。例如,常规的动态mql数组。让我们用SetArrayValue(array, i, j, value)这样的函数来代替它们;这将同时提高可读性。而调试也将变得更加容易。呃...
3.做一个普通的索引器怎么样? 女仆当然很酷,但女王还是更好。
4.这是我真正开始失去理智的地方。 这是不可以读的吗?
这更具有可读性,不是吗?
t.setDataElement(i, i*i);
酷,我想我要去接受治疗了。
5.酷。
6.我哭了。
该指标在构建630时停止编译。
ci 错误可以通过在for的 前面加一个广告来消除。
如何处理'rate_total'--未声明的标识符?
在Win7 x64和XP x32上也一样。
你能告诉我吗?MathMin()和MathMax()是作为函数(通过堆栈传递参数)还是作为宏替换(内联)实现的?根据参考书,它们的功能 是。
该指标在构建630时停止编译。
ci 错误可以通过在for的 前面加一个广告来消除。
如何处理'rate_total'--未声明的标识符?
在Win7 x64和XP x32上也一样。
你的代码中的某个地方显然有错误。如果你声明了变量limit、RT并设置了条件if(),那么提交的程序块在编译时不会出现错误。
自然,我没有给出代码,但有一个大致的结构。
在619版本中,该指标编译后工作正常。
630时,它产生了上述错误。
代码是100%不变的。编译器的工作方式显然已经改变。
错误?
下面的代码在编译器中产生了一种永久的循环。点击取消
不会立即起作用,但当它起作用时,就会重新获得对编辑器的控制。
取消按钮本身并没有消失,但它也无法访问。
编译按钮永远消失了(你必须重新加载编辑器才能找回来)。
请告知。MathMin()和MathMax()是作为函数(通过堆栈传递参数)还是作为宏置换(内联)实现的?根据参考书,它们是功能。
当然是函数,因为在编译的时候,参数的值是未知的。IMHO内联和宏是不同的。
P.S: 内联或不内联,我不能说。
当然是函数,因为在编译的时候,参数的值是未知的。IMHO内联和宏是不同的。
P.S:他们是否是内联的,我不能说。
宏和内联函数确实是不同的东西。但这不是我的意思。下面是一个例子,在编译的时候,参数的值是未知的
在第一种情况下,代码必须粘贴到当前函数中(我猜),在第二种情况下,函数被调用,参数 通过堆栈传递(我猜)。但出于优化的目的,编译器实际上也可以通过替换来实现第二个变体。是这样吗? 我不知道。这就是为什么我问。