错误、漏洞、问题 - 页 1499

 
Alexey Kozitsyn:
通往编程地狱的道路全局变量 铺就的" (Steve McConnell)
只显示了一个没有这种警告的例子。将一个变量创建为全局变量或局部变量是一个程序员的品味和经验问题。
[删除]  
Ilyas:
将增加一个关于没有真正使用局部和全局变量(简单类型或没有构造函数的 "复杂")的警告,但这项工作的优先级很低。
明白了,谢谢。为了以防万一,我将在这里尝试引起开发者的注意
 
Alexey Kozitsyn:
每台电脑可激活一次。有多少个终端并不重要。
是否有任何地方可以确认?
[删除]  
Vladimir Pastushak:
是否有任何地方可以确认?

买方获得了激活产品的权利,激活的次数由供应商在购买或租赁产品时指定。例如,如果在购买时允许对产品进行20次激活,那么买方将能够在20个不同的硬件配置 上进行安装,即使卖方后来减少了这个数量。

https://www.mql5.com/ru/market/rules

Правила покупки торговых роботов, индикаторов, книг и журналов в MetaTrader Market
Правила покупки торговых роботов, индикаторов, книг и журналов в MetaTrader Market
  • www.mql5.com
Общие положения и правила пользования сервисом Market
[删除]  
这个帖子 自动降低了图片的分辨率,其大小(字节)是原始图片的6倍之多。为什么?
 
Alexey Kozitsyn:
斯拉瓦,下午好,你能评论一下图书馆吗(上面的问题)?

这就是解决这个问题的方法。

long CChart::Open(const string symbol_name,const ENUM_TIMEFRAMES timeframe)
  {
   m_chart_id=ChartOpen(symbol_name,timeframe);
   if(m_chart_id==0)
      m_chart_id=-1;
   return(m_chart_id);
  }
[删除]  
Slawa:

这就是解决问题的方法

是的,谢谢你,那是最好的。给图书馆的。错误4024是怎么回事?
 
Slawa:

这就是解决这个问题的方法。

这样做的意义何在?标 准库的使用不能随心所欲,必须严格按照其结构的意识形态进行。Alexey Kozitsyn 错误地使用了它,这就是为什么他在输出中得到了很多bug。你只需要在创建CCart对象后,使用Attach方法将图表附加到类的对象上。这个方法是重载的,可以同时附加当前图表和需要的图表。你对 "打开 "方法的改变将扼杀对当前图表的操作能力。

还有对标准库的开发者的要求--请对库的结构做一个说明。很多人不理解,开始犯错,你也跟着犯错,开始破坏已经完成的一切。

 
Alexey Kozitsyn:

关于标准 MT4 的问题。

Chart.mqh文件

我想打开图表。我使用方法Open(const string symbol_name,const ENUM_TIMEFRAMES timeframe)。

1.如果你使用一个不可用的符号,ChartOpen()函数将返回错误#4024 - 内部错误。毫无疑问,这个错误可能是一个内部错误,但有一个更确切的错误代码--#4106--一个未知的符号。也许我们应该改变返回的错误代码?因为4024并没有告诉开发者在哪里寻找错误。

2.在失败的情况下,ChartOpen()给m_chart_id字段赋值为0,也就是说,结果是我们开始用当前的图表工作,但这是不正确的,因为我们未能打开我们工作所需的图表。因此,如果我们不调用Detach()方法,当前图表将在工作后简单地关闭。我也认为这不是正确的做法。ChartOpen()函数在出现错误时最好返回-1。

在使用图表之前,需要使用Attach方法将其附加到一个类对象上!!!。如果你不想用当前的图表工作( 0 ),那么执行这个检查,禁止在你的工作中使用当前的图表。

还有,在图表中工作,不使用Detach方法关闭图表退出,是什么意思?在你的类的析构器或OnDeinit中写一行真的很难吗?对物体的工作必须严格控制,那么你就可以避免错误。

[删除]  
coderex:

这样做的意义何在?标 准库的使用不应按照用户的意愿,而应严格按照其结构的意识形态进行。Alexey Kozitsyn 没有正确使用它,这就是为什么他在输出中得到了很多bug。你只需要在创建CCart对象后,使用Attach方法将图表附加到类的对象上。这个方法是重载的,可以同时附加当前图表和需要的图表。你对 "打开 "方法的改变将扼杀对当前图表的操作能力。

还有对标准库的开发者的要求--请对库的结构做一个说明。很多人不理解,开始犯错,而你也在跟随他们的步伐,开始打破你所做的一切。

我在上面清楚地写道,这样做的意义何在。如果在打开图表时出现错误(例如,如果你设置了无效的符号),那么出于某种原因,通过与Attach(void)方法的类比,Open()方法将把当前图表标识符绑定到对象上。它为什么要这样做呢?如果我想使用当前的图表,我将调用Attach(void)方法 { m_chart_id=ChartID(); },这就是全部。但在这里,我有一个明显错误的情况,由于某种原因,我开始用错误的东西工作。一般来说,这是ChartOpen()函数本身的问题,但既然他们不会改变它,至少让他们在库中改变它。

另一个论点。请按逻辑思考。该方法被称为Open()。这意味着将有新的东西被打开!而我们将开始使用这个新项目的工作。但在这里,我们是用旧的工作。我没有看到任何逻辑。而你似乎为了自己的目的而利用这种不准确的说法。

这个方法是重载的,可以同时绑定当前图表和需要的图表。而你对 "打开 "方法的改变将扼杀对当前图表的操作能力。

它能杀死什么?你仍然会有Attach()方法,它将继续做它原来做的事情。如你所说,检查Open()函数的返回ID,如果它小于0,就调用Attach(void)方法。这就是全部。我只是不明白,如果你可以直接调用Attach(void)方法并附加上当前的图表,为什么要弄得这么乱?

也许我不理解你。然后给我一个例子。

也请标准库的开发者对库的结构做一个说明。很多人不理解,开始犯错,你也跟着犯错,开始破坏你所做的一切。

多么响亮的声明...不要以为自己比别人聪明,结果可能不是这样。