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

 
Anatoli Kazharski:

MQLプログラムが置かれているチャートだけでなく、すべてのチャートのプロパティの変更を追跡できるようにする必要があります。

タイマーを通して松葉杖を作る。

 
fxsaber:

タイマーを通して松葉杖を作る。

松葉づえは作らないほうがいい。MQの開発者は、可能性を広げることができます。

トレーディング、自動売買システム、ストラテジーテストに関するフォーラム

バグ、バグ、質問

アナトーリ・カザルスキー さん 2018.08.20 08:11

MQLプログラムが配置されているチャートだけでなく、すべてのチャートのプロパティの変更を追跡できるようにしたいのですが。

現在、CHARTEVENT_CHART_CHANGE イベントは他のパラメータを含んでいません。

イベント

パラメータ値 id

パラメータ値 lparam

パラメータ値 dparam

パラメータ値 sparam

チャートの寸法を変更したり、プロパティダイアログでチャートのプロパティを変更したときのイベント

チャートイベント

-

-

-

//---

他のチャートでこのイベントを追跡するには、目的のチャートのIDを指定して監視を有効にすることができます。

例えば、こんな風に。

ChartSetInteger(chart_id,CHART_EVENT_CHART_CHANGE,true);
//---


lparam-parameterとして、変更が行われたチャートの識別子を指定することができます。sparamパラメータには、シンボルの名前を指定することができる。

 
A100:

実行中にエラーが発生しました。

結果:期待通り。

A::f<int>:1 A::f<int>:1
A::f<int>:753790661 A::f<int>:2
A::f<int>:Error:4007の場合

それ以外は。

ファイン何が違うの?なぜ、配列のサイズが突然753790660になり、その結果、メモリが突然底をついたのでしょうか(4007)?MT51881

さらに...最初のケースでクラス内の文字列を3文字削除しても、結果はOKです。

メッセージをありがとうございました。

固定されています。


現在のビルドで動作させるには、クラスのメソッドを宣言するときに scop を指定しないようにします。


その他の不具合報告は、この不具合に関連するもので、修正後は再現されません。

 

ヘルプの例ではうまくいきません。

https://www.mql5.com/ru/docs/basis/function/operationoverload

という言葉から、ページの一番下にある例が機能しない。

Другой пример перегрузки операции индексирования - работа с матрицами. Матрица представляет собою двумерный динамический массив, размеры массивов заранее неопределены. Поэтому нельзя объявить массив вида array[][] без указания размера второго измерения и затем передавать этот массив в качестве параметра. Выходом может служить специальный класс CMatrix, который содержит в себе массив объектов класса CRow.

とコンパイラは書きます。

object of 'CMatrix' cannot be returned, copy constructor 'CMatrix::CMatrix(const CMatrix &)' not found tst.mq5 244 14

object of 'CMatrix' cannot be returned, copy constructor 'CMatrix::CMatrix(const CMatrix &)' not found tst.mq5 261 11

object of 'CMatrix' cannot be returned, copy constructor 'CMatrix::CMatrix(const CMatrix &)' not found tst.mq5 281 14

object of 'CMatrix' cannot be returned, copy constructor 'CMatrix::CMatrix(const CMatrix &)' not found tst.mq5 303 11.

4 エラー(s), 0 警告(s) 5 1




Документация по MQL5: Основы языка / Функции / Перегрузка операций
Документация по MQL5: Основы языка / Функции / Перегрузка операций
  • www.mql5.com
Перегрузка операций позволяет использовать операционную нотацию (запись в виде простых выражений) к сложным объектам - структурам и классам. Запись выражений с использованием перегруженных операций упрощает восприятие исходного кода, так как более сложная реализация сокрыта. Для примера рассмотрим широко применяемые в математике комплексные...
 

コンパイルエラー (ME00188132)

template<typename T>
class B;
template<typename T>
class A {
        B<int> *f() { return NULL; }
};
template<typename T>
class B : public A<T> {}; //Error: 'A' - struct undefined
void OnStart()
{
        A<int> *a;
        B<int> *b;
}

といった具合に。

void OnStart()
{
        B<int> *b;
        A<int> *a;
}
をご覧ください。どんな違いがあるのでしょうか?
 
fxsaber:

これが理由ではありません。

これは、コードを読むときにとても役に立ちますし、状況によってはエラーを回避するのにも役立ちます。

なお、MQLでのこれはどこでも通用するわけではありません。

class A { protected:
        int a;
};
class B : public A {
        int a;
        void f1() { this.a    = 0; } //нормально
        void f2() { this.A::a = 0; } //Error: '::' - syntax error
};

C++では、エラーなしでコンパイルできること

 
A100:

なお、MQLでのこれはどこでも通用するわけではありません。

C++でエラーなくコンパイルできること

C++は変態のコツを知っている。マクロのどこかで使えるかもしれませんが、直接は使えません。

 
右上に、未読のPMがあるというアイコンがずっと表示されています。リセットする方法がない - 読まれている。すべて既読にする」ボタンの追加をお願いします。
 
fxsaber:

マクロのどこかで使えるかもしれませんが、直接は使えません。

マクロは全く関係ありません。これを通常のポインタに置き換えても、全く同じ構文になります。

struct A {
        int x;
};
struct B : A {
        int x;
};
void OnStart()
{
        B b;
        b.A::x = 1; //Error: '::' - syntax error
}
MQLではb.A::xを明示的に参照することはできませんが、C++では可能です。なぜそのような制限があるのですか?
 
A100:

マクロは全く関係ありません。これを普通のポインタに置き換えても、全く同じ構文になります。

この場合、それは正当化されます。これのバリアントは......なぜそういう書き方をするのか、はっきりしないんです。A::がすでにすべてを語っているとき。