Другой пример перегрузки операции индексирования - работа с матрицами. Матрица представляет собою двумерный динамический массив, размеры массивов заранее неопределены. Поэтому нельзя объявить массив вида 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.
Перегрузка операций позволяет использовать операционную нотацию (запись в виде простых выражений) к сложным объектам - структурам и классам. Запись выражений с использованием перегруженных операций упрощает восприятие исходного кода, так как более сложная реализация сокрыта. Для примера рассмотрим широко применяемые в математике комплексные...
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
};
MQLプログラムが置かれているチャートだけでなく、すべてのチャートのプロパティの変更を追跡できるようにする必要があります。
タイマーを通して松葉杖を作る。
タイマーを通して松葉杖を作る。
松葉づえは作らないほうがいい。MQの開発者は、可能性を広げることができます。
トレーディング、自動売買システム、ストラテジーテストに関するフォーラム
バグ、バグ、質問
アナトーリ・カザルスキー さん 2018.08.20 08:11
MQLプログラムが配置されているチャートだけでなく、すべてのチャートのプロパティの変更を追跡できるようにしたいのですが。
現在、CHARTEVENT_CHART_CHANGE イベントは他のパラメータを含んでいません。
イベント
パラメータ値 id
パラメータ値 lparam
パラメータ値 dparam
パラメータ値 sparam
チャートの寸法を変更したり、プロパティダイアログでチャートのプロパティを変更したときのイベント
チャートイベント
-
-
-
//---
他のチャートでこのイベントを追跡するには、目的のチャートのIDを指定して監視を有効にすることができます。
例えば、こんな風に。
lparam-parameterとして、変更が行われたチャートの識別子を指定することができます。sparamパラメータには、シンボルの名前を指定することができる。
実行中にエラーが発生しました。
結果:期待通り。
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
コンパイルエラー (ME00188132)
といった具合に。
をご覧ください。どんな違いがあるのでしょうか?これが理由ではありません。
これは、コードを読むときにとても役に立ちますし、状況によってはエラーを回避するのにも役立ちます。なお、MQLでのこれはどこでも通用するわけではありません。
C++では、エラーなしでコンパイルできること
なお、MQLでのこれはどこでも通用するわけではありません。
C++でエラーなくコンパイルできること
C++は変態のコツを知っている。マクロのどこかで使えるかもしれませんが、直接は使えません。
マクロのどこかで使えるかもしれませんが、直接は使えません。
マクロは全く関係ありません。これを通常のポインタに置き換えても、全く同じ構文になります。
MQLではb.A::xを明示的に参照することはできませんが、C++では可能です。なぜそのような制限があるのですか?マクロは全く関係ありません。これを普通のポインタに置き換えても、全く同じ構文になります。
この場合、それは正当化されます。これのバリアントは......なぜそういう書き方をするのか、はっきりしないんです。A::がすでにすべてを語っているとき。