エラー、バグ、質問 - ページ 2760

 
Sergey Dzyublik:

このコードでは、条件が入力できないBAGが表示されていますが、それでもコード内の全く別の場所でブレークポイントをトリガーしています。
その他の質問は?

コードオプティマイザがすべてを捨ててしまい、関数が空っぽのままになっています。

ブレークポイントが関数の最後尾に移動してトリガーされました。

 
MetaQuotes:

コード・オプティマイザーがすべてを捨てて、関数を空にしてしまったのです。
ブレークポイントが関数の同じ末尾に移動し、動作しました。

最初の例でちょっと興奮しましたね、同感です。
しかし、2つ目はどうでしょう。さて、ブレークポイントは コンディションの内部に留まり、どこにも移動しません。
ブレークポイントのトリガーは、入力条件が満たされたとユーザーに誤解を与えるが、実際には全くそうでない場合もある。

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) でテンプレートクラスからの継承を使用すると、何かが壊れました。
 
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では、プログラム的に角度を知ることができないのでしょうか?

プログラムで2点の時刻と価格を設定できるが、角度は0を返す。

OBJ_TRENDBYANGLEを手動で動かすと、法線角度の値が返される。


トレンドライン上に、トレンドラインそのものと同じ角度でテキストを単純に配置したい。

しかし、トレンドラインは角度を返さないのに対し、OBJ_TRENDBYANGLEは第2座標が固定されており、価格の上昇や下落によってチャートスケールが変化すると、誤った情報を得ることになる...。

 

なぜ、コンパイラは警告を 出すのですか?

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 で宣言されているため、継承は不可能です。

最終修飾子がないのにエラーになるとか、なんなんだ?