错误、漏洞、问题 - 页 2532

 
Igor Makanu:

一切正常,但作为指标缓冲区 的数组应该用修改器public来描述。

是的,当然了。

当然,对类成员的公开访问不是很好,但主要问题--在不复制的情况下访问数组数据的问题得到了解决。

谢谢你,这个问题已经澄清了。

 
如果问题想通了,你能帮助我吗?对于你们这些编程的猛犸象来说,这就像一根芦苇...
 
Georgiy Merts:

当然,对类成员的公共访问不是很好,但主要问题--在不复制的情况下访问数组数据的问题得到了解决。

我在YouTube上看了很多视频,我看到了一个智能程序员的频道,我记得这句话:"代码首先必须执行它的任务!"。

你不在一个大项目上工作,对吗?- 你知道为什么要定义这个类成员,你可以在没有编译器的帮助下控制对它的访问,不是吗?;)

 

@Ilyas,更新了mt4的版本


编译和运行错误后工作正常的代码


 
Igor Makanu:

我在YouTube上看了很多视频,我看到了一个优秀程序员的频道,我记得这句话:"代码首先必须完成它的任务!"。

你不在一个大项目上工作,是吗?- 你知道为什么要定义这个类成员,你可以在没有编译器的帮助下控制对它的访问,不是吗?;)

实际上,对类成员的访问最好通过方法来实现,为了减少运行时的解读,使用内联的获取方法。
 
Igor Makanu:

我在YouTube上看了很多视频,我看到了一个优秀程序员的频道,我记得这句话:"代码首先必须完成它的任务!"。

你不在一个大项目上工作,是吗?- 你知道为什么要定义这个类成员,你可以在没有编译器的帮助下控制对它的访问,不是吗?;)

不。

首先,代码必须是透明和可理解的,易于维护。然后,如果它未能履行其任务,就会立即被发现。

但是,当代码中充满了大量具有潜在不安全结构的片段,导致非常微妙的非明显的错误时,你永远无法确定 "代码完成了它的任务"。

而当从事一个大型项目时,你完全不能没有它,在许多公司中,有关于记号、申报、什么可以和不可以申报为股份等的官方准则。当然,当你单独工作时,你声明一个类成员,你知道它的用途,你知道你将如何使用它。除了任何代码,无论多么复杂,即使由一个程序员完成,也往往会改变架构。而我个人不记得是什么,在哪里,如何,为了什么。同时,我慷慨地在代码中加入了详细的注释。而且,在半年后回到其他片段时,我仍然花了相当多的时间来理解为什么要这样做而不是以不同的方式。如果没有注释,我就根本无法理解自己的代码。

当然,如果你有彼得-科诺夫的内存,你就不必担心共享权限的问题,让所有的变量成为全局变量--并且在任何时候都可以使用你需要的一切。然而,我的记忆力要差得多,我已经可以在一周内忘记一个程序的细微之处。因此,我很早就制定了一个原则,即在任何地方的代码中,必须有我在这里所需要的完全相同的内容,而且不能多一个变量。最好的办法是把所有东西都转换成虚拟接口,并尽可能地划分每个类的责任区(当然必须有一个尺度,以免处理这些包装器的时间超过有用的代码)。

回想一下,缺乏指向数组的指针,开发者的理由是 "照顾程序员",这样你就不会意外地使用一个不再相关的指向数组的指针。 不过对于类来说没有问题。好吧,他们解释说:"如果你用类来写,你已经足够熟练地使用指针了,而数组对初学者来说是可用的,我们不希望他们在想使用数组的指针时出现问题......没有指针,就是这样"......

 
Vladimir Simakov:
一般来说,通过方法来实现对类成员的访问是比较好的,为了避免在运行时取消引用,可以使用内联的获取方法。

没错,而且我通常会倾向于这样做。一般来说,我很少使用公共类成员,所有的访问都是通过内联方法。 只有在特殊情况下,如这些指标数组,我必须使用公共...

 
Влад:
如果问题解决了,你能帮我解决吗?对于你们这些编程的猛犸象来说,这就像一只飞蛾...

在你的案例中,组织一个while()循环而不是for()循环。

检查是否有一些闪烁结束的迹象。

但关于 "可变频率的闪烁"--有些奇怪...我在飞行中没有看到任何错误,它应该经常闪动。

虽然,我怀疑创建和删除图形对象,而不是让它们隐形是有意义的。 但是,似乎,你不能让一个对象隐形......因此,剩下的就是删除。

 
Georgiy Merts:

当然,如果你有像彼得-科诺夫那样的内存,你就不必担心访问分离的问题,把所有的变量都变成全局变量--并且在任何时候都可以使用你需要的一切。

我从不训练内存,只在万不得已时才使用全局变量,代码有时甚至在我看来是多余的,但代码片段是可以移植到另一个项目的。

我通常使用长的函数和变量名称,这样我就能读到我以前写的东西。

void CGrid::Scenario_01(int ordernumber)//------ Сценарий ReOpenBUY & ReOpenSELL
  {
   int set         = Order[ordernumber].StateOrderNumberSetting;
   double pr       = Order[ordernumber].StateOrderStartPrice;
   double vol      = Order[ordernumber].StateOrderLot;
   double volcoeff = dealssettings[set].volcoeff;
   double profit,openprice;
   Order[ordernumber].GetCloseOrderInfo(profit,openprice);
   double l=CalcLot(dealssettings[set].volratio,vol,volcoeff,profit);
   deal=new Cdeal(set,dealssettings[set].dealtype,l,pr,dealssettings[set].closepips,magic);
   Order.Delete(ordernumber); 
   Order.AddValue(deal);
  }
另一个问题是,我不坚持OOP风格--我不把所有东西都包在类里,我在一个程序中同时使用程序性和OOP风格,用现成的块组成一个程序更方便、更快捷,不管缺少什么,我都会根据任务添加或修改现成的东西。
 
Vladimir Simakov:
而为了减少运行时的解读,可以使用内联的获取方法。
在我看来,内联是一个陈旧的东西。 编译器完美地内联了所有的东西,所以没有必要让代码过载。而在MQL中,这个指定符根本就不是什么,只是为了兼容而添加的(我不知道为什么,如果一个人可以自己声明这样一个宏)。