错误、漏洞、问题 - 页 2416

 
Andrey Pogoreltsev:

这里不需要明确的规定。它应该只是应用重载方法的顺序。也就是说,重载解决方案的任务不是制造困境,而是选择最合适的方法。如果我们忽略访问修饰符,则从表中取第一个方法,或者取决于编译器的实现,但不存在歧义。

例如,如果有2个具有不同输入参数的方法,情况会如何?

回到C++,同一个向量有一个。

因此,这是一个绝对正常的情况。

你举了一些非常简单的小学的例子。看来这与原来的例子没有关系。


阿列克谢-纳沃伊科夫

在这个例子中,它是一个非恒定对象的方法,所以它必须被调用,其他条件都一样。

我不知道这个规则,谢谢。

如果我们去掉铸造,使两个方法的参数都是int类型,代码就会正常编译。 所以,是铸造导致了MQL的挂起。 这个铸造一定不会影响代码,因为它是相同的。

似乎问题的原因是,编译器没有检查重载方法的铸造是否相同。

 

一般来说,要解决这个问题(以及MQL中的许多其他问题),你需要把其中一个方法移到一个辅助类中。

class A { };

class _B
{
 protected: 
  A _a[];
 public:        
  const A * operator[](uint i) const { return &_a[i]; }  
};

class B : public _B
{
 public: 
  A * operator[](uint i)       { return &_a[i]; }
};
 
fxsaber:

你已经给出了一些非常简单的小学例子。这似乎与原来的例子没有什么关系。

你应该读读C++标准,看看这都是由我上面引用的那个规则解决的。
 
Slava:

首先,在优化缓存中,MT5和MT4都总是将字符串参数截断为63个字符。

在传输事件时,字符串不能超过63个字符。

所以来自外部的东西是有限的

就终端用户产品而言。供应商必须考虑到这些限制。如果他不了解这些,那么他在销售产品之前就没有对其进行足够的测试。

这不是关于过去和现在的情况,而是如果你想与时俱进,向好的方向发展,就应该如此。

 

我遇到了这个问题,在测试一个EA 时,在设置好参数并按下启动按钮后,EA设置被重置为默认值,这可能是什么问题?

视频中的一个例子

 
Dmitry Melnichenko:

我遇到了这个问题,在测试一个EA 时,在设置好参数并按下启动按钮后,EA设置被重置为默认值,这可能是什么问题?

视频示例

在你进入 "设置 "选项卡后,MT5在测试器中自动重置为默认值

见第1号帖子。

 

我在一个邻近的主题中提出了一个问题,但似乎没有多少人看那里。我在这里复制一下。

https://www.mql5.com/ru/forum/6343/page1020#comment_11112212

简而言之:在期货上(在测试器中)交易被打开和关闭(通过SL/TP),但总是有零利润。这可能是测试器的一个错误吗?还是需要某种技巧?

Вопросы от начинающих MQL5 MT5 MetaTrader 5
Вопросы от начинающих MQL5 MT5 MetaTrader 5
  • 2019.03.26
  • www.mql5.com
Подскажите пожалуйста, такой показатель тестера в жизни реален? И хороший это или плохой результат за год с депо 3000...
 

编译器错误。 当编译(语法检查)带有此代码的.mqh文件时,没有显示错误。 只有在编译可执行文件时才显示,这很不方便。

class A
{
 public: 
  A(int) {  }
};

class B : public A { };  // Здесь должна быть ошибка  'A' - wrong parameters count

B b;
 
Alexey Navoykov:

编译器错误。 当编译(语法检查)带有此类代码的.mqh文件时,不会产生错误。 只有在编译可执行文件时才会产生,这很不方便。

因为赫德原则上不能编译:)))

如果你强迫整个编译器编译一个heder,你会得到很多假阳性结果。

PS。如果不使用这样的类,C++编译器也不会抱怨。
 
Andrey Pogoreltsev:

因为赫德原则上不能编译:)))

如果你强迫整个编译器编译一个heder,你会得到很多假阳性结果。

PS。如果不使用这样的类,C++编译器也不会抱怨。

我知道它不会编译。 我说的是语法检查(在ME中也叫 "编译"),因为我甚至在以前的帖子中用括号指明了它。 如果你在C++编译器中也运行语法检查(通常通过命令行),它就会像个宝贝一样骂人。