错误、漏洞、问题 - 页 2760

 
Sergey Dzyublik:

代码中显示了一个不能输入条件的BAG,但仍然在代码中一个完全不同的地方触发了一个断点。
还有问题吗?

代码优化器把所有的东西都扔掉了,这个函数就剩下空的了。

断点移到了函数的最末端并触发了。

 
MetaQuotes:

是代码优化器把所有的东西都扔掉了,让函数变成空的。
断点移到了函数的同一端,并且成功了。

我对第一个例子感到有点兴奋,我同意。
但第二种情况呢?好吧,断点 保持在条件内,没有移动任何地方。
触发断点会误导用户认为输入条件已经得到满足,而事实上可能根本不是这样。

class A{
public:
   bool m_flag;
   A* m_next;
   A(bool flag) : m_flag(flag){}
   
   void test(){
      if(m_flag){
         printf("1");
         m_next = m_next;    // Вручную установленная точка останова срабатывает как для false так и true условий
         //m_next = &this;   // Ok
      }   
   }
};

void OnStart(){
  {A a(false); a.test();}   // Result: breakpoint              Expected result: 
  {A a(true);  a.test();}   // Result: printf + breakpoint     Expected result: printf + breakpoint
}
 
MetaQuotes:

断点移到了函数的同一端,并且成功了。

你认为这不是一个错误吗?

 
MT5(build 2460)在使用模板类的继承时出现了问题,在之前的版本(包括build 2450)中,一切正常。
 
MT5错误(build 2460)当从命名空间继承模板类时,出现编译错误
C++在线 https://onlinegdb.com/S1E503pj8
namespace NameSpace{  
   struct A{};
   
   template<typename T>
   struct B : public A{};          // 'A' - declaration without type
};

struct D : public NameSpace::B<int>{
   int data;
};

void OnStart(){
   D d;
}
 

关于交易、自动交易系统和策略测试的论坛

MQL5中的OOP问题

fxsaber, 2020.05.30 10:04

得到了一个意想不到的结果。
#include <fxsaber\Benchmark.mqh> // https://c.mql5.com/3/321/Benchmark.mqh

// Простая структура.
struct STRUCT1
{
  int i;  
  double j[2];
};

// Сложная структура.
struct STRUCT2
{
  int i;  
  string Str;
  
  STRUCT2() : Str("1234567 1234567")
  {
  }
};

template <typename T>
int Func( T &Array[] )
{  
  // Write
  for (int i = ArraySize(Array) - 1; i >= 0; i--)
    Array[i].i = i;

  int Sum = 0;
  
  // Read
  for (int i = ArraySize(Array) - 1; i >= 0; i--)
    Sum += Array[i].i;
    
  return(Sum + ArraySize(Array));    
}

void OnStart()
{
  STRUCT1 Array1[]; // Простая структура.
  STRUCT2 Array2[]; // Сложная структура.
  
  const int Amount = 5 e7;
  
  Print(_B(ArrayResize(Array1, Amount), 1));
  Print(_B(ArrayResize(Array2, Amount), 1));
    
  Print(_B(Func(Array1), 1)); // Чтение и запись простой структуры происходит в разы дольше,
  Print(_B(Func(Array2), 1)); // чем сложной.
}


        50000000
        Alert: Time[Test6.mq5 280: ArrayResize(Array2,Amount)] = 640 ms.
        50000000
        Alert: Time[Test6.mq5 282: Func(Array1)] = 440 ms.
        1333106752
        Alert: Time[Test6.mq5 283: Func(Array2)] = 156 ms.
        1333106752
 

为什么在OBJ_TRENDBYANGLE 中,我们不能通过编程知道角度?

我们可以用程序设置两点的时间和价格,但角度返回0。

如果我们手动移动OBJ_TRENDBYANGLE,会返回法线角度值。


我想在趋势线上简单地放置文本,其角度与趋势线本身相同。

但趋势线不返回角度,而OBJ_TRENDBYANGLE有一个固定的第二坐标,当图表比例因价格上涨或下跌而改变时,我们会得到错误的信息......

 

为什么编译器会给出一个警告

uchar uc[16];
ArrayInitialize(uc, 0xFF); //truncation of constant value

UPD: 没有

intArrayInitialize( uchar array[], uchar value )。

不方便写

uchar uc[16] = {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF};
[删除]  

401代码 - 什么是错误?

什么事?

401

从这个类中继承是不可能的,因为它是用final 指定符声明的。

Документация по MQL5: Основы языка / Типы данных / Структуры, классы и интерфейсы
Документация по MQL5: Основы языка / Типы данных / Структуры, классы и интерфейсы
  • www.mql5.com
Структура является набором элементов произвольного типа (кроме типа void). Таким образом, структура объединяет логически связанные данные разных типов. Объявление структуры Имя структуры нельзя использовать в качестве идентификатора (имени переменной или функции). Следует иметь ввиду, что в MQL5 элементы структуры следуют непосредственно друг...
 
Igor Makanu:

为什么编译器会给出一个警告

UPD: 没有

int ArrayInitialize( uchar array[], uchar value )。

是不方便写的

0xFF可能被编译器变成了4个字节。

Alexsandr San:

401代码 谁能告诉我这是什么错误?

发现

401

从这个类中继承是不可能的,因为它是用final 指定符声明的。

问题是什么--没有最终修饰语,但有一个错误,还是什么?